diff --git a/about/index.html b/about/index.html index 322ceb440..38c4afc41 100644 --- a/about/index.html +++ b/about/index.html @@ -1 +1 @@ -关于 | GGLSS

关于

🤖️ 数码爱好者🔍 不解决不放弃🏠 智能家居小能手🔨 开发小萌新
折腾劲 MAX 🤝脚踏实地行动派 🏃践踏各种困难 🧱话多人不狠 💢

生活明朗,万物可爱✨

你好,很高兴认识你👋
我叫GGLSS
是一名 测试工程师、独立开发者、博主
追求

源于
热爱而去感受
学习生活程序体验

Hello there!

技能
开启创造力
Vue
Java
Docker
Webpack
Photoshop
Swift
Python
Node
Git
Css
Js
...
生涯
无限进步
EDU,软件工程专业
生涯
座右铭
生活明朗,万物可爱。
特长
脑回路新奇的酸菜鱼二次元指数MAX
爱好游戏
原神
UID: 125766904
爱好番剧
紫罗兰的永恒花园
心路历程
欢迎来到我的博客 😝,这里是我记笔记的地方 🙌,目前就读于长沙湖南信息学院软件工程专业,虽然有时候常常会忘记更新笔记,咕咕 ✋~ 但是记笔记真的是一个很棒的习惯 💪,能把学下来的知识进行积累,沉淀,有一句话说的好,能教给别人的知识,才是真正学会了的知识 ⚡ 每周我都会尽量进行更新 ☁️,如果没更的话,可能是我忘了,也可能是我在钻研某个东西的时候太入迷了肯定又熬夜了同学们不要学我,老是熬夜会长痘 给大家推荐一部番:因为这部番,2018 年的一个夏天我看完以后心情久久不能释怀,为薇尔莉特与爱感到一种说不上来的味道,多年以后在看这部番,才明白原来这就是爱,喜欢这部番不仅仅是因为它制作的用心,不论是人物细节还是场景细节,不管是 op 还是 ed 都非常好听,最后的结局或许才是让我不能忘怀的原因,薇尔莉特,希望收到来自家人,朋友,恋人的那封 "信" ~

致力于成为一个前端小姥🐷

又菜又爱玩🎮ctrl +Cctrl +V高级CV工程师🏆

擅长PS、Pr、Ae、Au、Ai、Dw、An、Id等软件的安装与卸载🎃

精通Html、CSS、JavaScript、Vue、React、PHP、Java、Python、C、C++、C#、Go、TypeScript等单词的拼写🎲

熟悉Windows、Linux、Mac、Android、IOS等系统的开关机👻

todoList

原生微信小程序

vue3、vite、 pinia

重装文档重写

Electron

操作系统

svg绘制

threeJS

Next

Flutter

智慧城市大前端

react18系统学习

工业企业生产管理

语言的魅力

控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +关于 | GGLSS

关于

🤖️ 数码爱好者🔍 不解决不放弃🏠 智能家居小能手🔨 开发小萌新
折腾劲 MAX 🤝脚踏实地行动派 🏃践踏各种困难 🧱话多人不狠 💢

生活明朗,万物可爱✨

你好,很高兴认识你👋
我叫GGLSS
是一名 测试工程师、独立开发者、博主
追求

源于
热爱而去感受
学习生活程序体验

Hello there!

技能
开启创造力
Vue
Java
Docker
Webpack
Photoshop
Swift
Python
Node
Git
Css
Js
...
生涯
无限进步
EDU,软件工程专业
生涯
座右铭
生活明朗,万物可爱。
特长
脑回路新奇的酸菜鱼二次元指数MAX
爱好游戏
原神
UID: 125766904
爱好番剧
紫罗兰的永恒花园
心路历程
欢迎来到我的博客 😝,这里是我记笔记的地方 🙌,目前就读于长沙湖南信息学院软件工程专业,虽然有时候常常会忘记更新笔记,咕咕 ✋~ 但是记笔记真的是一个很棒的习惯 💪,能把学下来的知识进行积累,沉淀,有一句话说的好,能教给别人的知识,才是真正学会了的知识 ⚡ 每周我都会尽量进行更新 ☁️,如果没更的话,可能是我忘了,也可能是我在钻研某个东西的时候太入迷了肯定又熬夜了同学们不要学我,老是熬夜会长痘 给大家推荐一部番:因为这部番,2018 年的一个夏天我看完以后心情久久不能释怀,为薇尔莉特与爱感到一种说不上来的味道,多年以后在看这部番,才明白原来这就是爱,喜欢这部番不仅仅是因为它制作的用心,不论是人物细节还是场景细节,不管是 op 还是 ed 都非常好听,最后的结局或许才是让我不能忘怀的原因,薇尔莉特,希望收到来自家人,朋友,恋人的那封 "信" ~

致力于成为一个前端小姥🐷

又菜又爱玩🎮ctrl +Cctrl +V高级CV工程师🏆

擅长PS、Pr、Ae、Au、Ai、Dw、An、Id等软件的安装与卸载🎃

精通Html、CSS、JavaScript、Vue、React、PHP、Java、Python、C、C++、C#、Go、TypeScript等单词的拼写🎲

熟悉Windows、Linux、Mac、Android、IOS等系统的开关机👻

todoList

原生微信小程序

vue3、vite、 pinia

重装文档重写

Electron

操作系统

svg绘制

threeJS

Next

Flutter

智慧城市大前端

react18系统学习

工业企业生产管理

语言的魅力

控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/08/index.html b/archives/2022/08/index.html index 4204a5ad8..622c33f89 100644 --- a/archives/2022/08/index.html +++ b/archives/2022/08/index.html @@ -1 +1 @@ -八月 2022 | GGLSS
文章总览 - 37
2022
如何使用pyyaml获取yaml里面的数据
如何使用pyyaml获取yaml里面的数据
Shell函数
Shell函数
Shell工具(一)
Shell工具(一)
Shell条件判断
Shell条件判断
Shell流程控制
Shell流程控制
Shell运算符
Shell运算符
Shell工具(二)
Shell工具(二)
Shell脚本入门
Shell脚本入门
Shell变量
Shell变量
Shell脚本初探
Shell脚本初探
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +八月 2022 | GGLSS
文章总览 - 37
2022
Shell函数
Shell函数
Shell工具(一)
Shell工具(一)
Shell条件判断
Shell条件判断
Shell流程控制
Shell流程控制
Shell运算符
Shell运算符
Shell工具(二)
Shell工具(二)
如何使用pyyaml获取yaml里面的数据
如何使用pyyaml获取yaml里面的数据
Shell脚本初探
Shell脚本初探
Shell变量
Shell变量
Shell脚本入门
Shell脚本入门
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/08/page/2/index.html b/archives/2022/08/page/2/index.html index f36e4fb4e..924f4e621 100644 --- a/archives/2022/08/page/2/index.html +++ b/archives/2022/08/page/2/index.html @@ -1 +1 @@ -八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/08/page/3/index.html b/archives/2022/08/page/3/index.html index f47d25a74..a8d915942 100644 --- a/archives/2022/08/page/3/index.html +++ b/archives/2022/08/page/3/index.html @@ -1 +1 @@ -八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/08/page/4/index.html b/archives/2022/08/page/4/index.html index f41ba521d..edac1cfd9 100644 --- a/archives/2022/08/page/4/index.html +++ b/archives/2022/08/page/4/index.html @@ -1 +1 @@ -八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +八月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/09/index.html b/archives/2022/09/index.html index 35b53f65a..9584f4bbb 100644 --- a/archives/2022/09/index.html +++ b/archives/2022/09/index.html @@ -1 +1 @@ -九月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +九月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/10/index.html b/archives/2022/10/index.html index 8f600cb84..04f3a9c51 100644 --- a/archives/2022/10/index.html +++ b/archives/2022/10/index.html @@ -1 +1 @@ -十月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html index 0ab0b3a76..b6fb0a3c9 100644 --- a/archives/2022/11/index.html +++ b/archives/2022/11/index.html @@ -1 +1 @@ -十一月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十一月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/11/page/2/index.html b/archives/2022/11/page/2/index.html index cc4444378..9479c4f1a 100644 --- a/archives/2022/11/page/2/index.html +++ b/archives/2022/11/page/2/index.html @@ -1 +1 @@ -十一月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十一月 2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/12/index.html b/archives/2022/12/index.html index 7bfc0ac6c..921631bd3 100644 --- a/archives/2022/12/index.html +++ b/archives/2022/12/index.html @@ -1 +1 @@ -十二月 2022 | GGLSS
文章总览 - 5
2022
包装类
包装类
字符串
字符串
抽象类与接口
抽象类与接口
继承、重写与重载
继承、重写与重载
硬件性能监控平台
硬件性能监控平台
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十二月 2022 | GGLSS
文章总览 - 5
2022
包装类
包装类
字符串
字符串
抽象类与接口
抽象类与接口
继承、重写与重载
继承、重写与重载
硬件性能监控平台
硬件性能监控平台
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/index.html b/archives/2022/index.html index b0610c83c..63926c331 100644 --- a/archives/2022/index.html +++ b/archives/2022/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/2/index.html b/archives/2022/page/2/index.html index 96276e978..aa3a050d0 100644 --- a/archives/2022/page/2/index.html +++ b/archives/2022/page/2/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/3/index.html b/archives/2022/page/3/index.html index f090e10d2..b50df87ec 100644 --- a/archives/2022/page/3/index.html +++ b/archives/2022/page/3/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/4/index.html b/archives/2022/page/4/index.html index 69da69db7..88a415801 100644 --- a/archives/2022/page/4/index.html +++ b/archives/2022/page/4/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/5/index.html b/archives/2022/page/5/index.html index 8048f7952..5c2cc9855 100644 --- a/archives/2022/page/5/index.html +++ b/archives/2022/page/5/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/6/index.html b/archives/2022/page/6/index.html index 673f5e971..228652299 100644 --- a/archives/2022/page/6/index.html +++ b/archives/2022/page/6/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/7/index.html b/archives/2022/page/7/index.html index f3b6877da..df9d480f8 100644 --- a/archives/2022/page/7/index.html +++ b/archives/2022/page/7/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2022/page/8/index.html b/archives/2022/page/8/index.html index 498b90823..72ad9dddb 100644 --- a/archives/2022/page/8/index.html +++ b/archives/2022/page/8/index.html @@ -1 +1 @@ -2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2022 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2023/09/index.html b/archives/2023/09/index.html index 8c0b50b2b..eb532ffca 100644 --- a/archives/2023/09/index.html +++ b/archives/2023/09/index.html @@ -1 +1 @@ -九月 2023 | GGLSS
文章总览 - 1
2023
长难句一
长难句一
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +九月 2023 | GGLSS
文章总览 - 1
2023
长难句一
长难句一
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2023/10/index.html b/archives/2023/10/index.html index a2b00420f..0aebd2ea1 100644 --- a/archives/2023/10/index.html +++ b/archives/2023/10/index.html @@ -1 +1 @@ -十月 2023 | GGLSS
文章总览 - 1
2023
Butterfly美化记录
Butterfly美化记录
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十月 2023 | GGLSS
文章总览 - 1
2023
Butterfly美化记录
Butterfly美化记录
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2023/12/index.html b/archives/2023/12/index.html index 58f76a5ff..ff21c92ad 100644 --- a/archives/2023/12/index.html +++ b/archives/2023/12/index.html @@ -1 +1 @@ -十二月 2023 | GGLSS
文章总览 - 2
2023
真正厉害的人都戒掉了玻璃心
真正厉害的人都戒掉了玻璃心
english one
english one
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +十二月 2023 | GGLSS
文章总览 - 2
2023
真正厉害的人都戒掉了玻璃心
真正厉害的人都戒掉了玻璃心
english one
english one
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2023/index.html b/archives/2023/index.html index 44d87dbd3..94f499285 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -1 +1 @@ -2023 | GGLSS
文章总览 - 4
2023
真正厉害的人都戒掉了玻璃心
真正厉害的人都戒掉了玻璃心
english one
english one
Butterfly美化记录
Butterfly美化记录
长难句一
长难句一
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2023 | GGLSS
文章总览 - 4
2023
真正厉害的人都戒掉了玻璃心
真正厉害的人都戒掉了玻璃心
english one
english one
Butterfly美化记录
Butterfly美化记录
长难句一
长难句一
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html index 05f350eb0..a6634a994 100644 --- a/archives/2024/01/index.html +++ b/archives/2024/01/index.html @@ -1 +1 @@ -一月 2024 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +一月 2024 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/2024/index.html b/archives/2024/index.html index 11e596d5f..1cdaf8d2d 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -1 +1 @@ -2024 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +2024 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/index.html b/archives/index.html index 80fa964ff..5e8ba18fb 100644 --- a/archives/index.html +++ b/archives/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/2/index.html b/archives/page/2/index.html index 8a2dad8de..5c912e56c 100644 --- a/archives/page/2/index.html +++ b/archives/page/2/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/3/index.html b/archives/page/3/index.html index 00b1b3a91..13d90cb76 100644 --- a/archives/page/3/index.html +++ b/archives/page/3/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/4/index.html b/archives/page/4/index.html index c3517dcff..4b676b879 100644 --- a/archives/page/4/index.html +++ b/archives/page/4/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/5/index.html b/archives/page/5/index.html index cb8ab9fa9..c094d031e 100644 --- a/archives/page/5/index.html +++ b/archives/page/5/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/6/index.html b/archives/page/6/index.html index b94bafa2f..1b8faa9b6 100644 --- a/archives/page/6/index.html +++ b/archives/page/6/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/7/index.html b/archives/page/7/index.html index 624412b0b..60a12fccb 100644 --- a/archives/page/7/index.html +++ b/archives/page/7/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/8/index.html b/archives/page/8/index.html index a01c92013..9f6f2eece 100644 --- a/archives/page/8/index.html +++ b/archives/page/8/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/archives/page/9/index.html b/archives/page/9/index.html index 2d2a0d2b8..d5fa50b78 100644 --- a/archives/page/9/index.html +++ b/archives/page/9/index.html @@ -1 +1 @@ -归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +归档 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/categories/index.html b/categories/index.html index 4c838b0c4..f13fd86c4 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1 +1 @@ -分类 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\255\246\344\271\240\346\227\245\345\270\270/index.html" "b/categories/\345\255\246\344\271\240\346\227\245\345\270\270/index.html" index 3eb54cd50..ddefe5ee8 100644 --- "a/categories/\345\255\246\344\271\240\346\227\245\345\270\270/index.html" +++ "b/categories/\345\255\246\344\271\240\346\227\245\345\270\270/index.html" @@ -1 +1 @@ -分类: 学习日常 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 学习日常 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/index.html" index fd45d4003..59b400770 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/2/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/2/index.html" index 3a1709d64..146c5f989 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/2/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/2/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/3/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/3/index.html" index 6c2be2c6a..74bc9374c 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/3/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/3/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/4/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/4/index.html" index 378d6f073..ca16fcc43 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/4/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/4/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/5/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/5/index.html" index da29d9664..cb10ca0d5 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/5/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/5/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/6/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/6/index.html" index 03542ea2b..7cfddf47e 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/6/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/6/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/7/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/7/index.html" index bdd6687c2..6af285aaa 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/7/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/7/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/8/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/8/index.html" index b5b25aab6..2213a8fb7 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/8/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/8/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/9/index.html" "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/9/index.html" index e427b89b8..80bc5d9af 100644 --- "a/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/9/index.html" +++ "b/categories/\345\267\245\345\205\267\346\225\231\347\250\213/page/9/index.html" @@ -1 +1 @@ -分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 工具教程 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\346\227\245\345\270\270\346\235\202\350\260\210/index.html" "b/categories/\346\227\245\345\270\270\346\235\202\350\260\210/index.html" index 189d9a1fb..39ca8237b 100644 --- "a/categories/\346\227\245\345\270\270\346\235\202\350\260\210/index.html" +++ "b/categories/\346\227\245\345\270\270\346\235\202\350\260\210/index.html" @@ -1 +1 @@ -分类: 日常杂谈 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 日常杂谈 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git "a/categories/\347\273\217\351\252\214\345\210\206\344\272\253/index.html" "b/categories/\347\273\217\351\252\214\345\210\206\344\272\253/index.html" index 0bbfd1534..26a8e9f61 100644 --- "a/categories/\347\273\217\351\252\214\345\210\206\344\272\253/index.html" +++ "b/categories/\347\273\217\351\252\214\345\210\206\344\272\253/index.html" @@ -1 +1 @@ -分类: 经验分享 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +分类: 经验分享 | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/essay/index.html b/essay/index.html index e927721e9..396886fc1 100644 --- a/essay/index.html +++ b/essay/index.html @@ -1 +1 @@ -哔哔一下 | GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +哔哔一下 | GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/index.html b/index.html index d657e2e93..46f30c811 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
为博客编写bat文件
Mac提示安装包损坏
上海游玩日记
python自动化配置参数
自动获取driver
真正厉害的人都戒掉了玻璃心
english one
Butterfly美化记录
长难句一
包装类
字符串
抽象类与接口
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
为博客编写bat文件
Mac提示安装包损坏
上海游玩日记
python自动化配置参数
自动获取driver
真正厉害的人都戒掉了玻璃心
english one
Butterfly美化记录
长难句一
包装类
字符串
抽象类与接口
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/link/index.html b/link/index.html index 12e631dfe..527eec190 100644 --- a/link/index.html +++ b/link/index.html @@ -1 +1 @@ -link | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +link | GGLSS
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html index e9e7982b6..1d8043363 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
继承、重写与重载
硬件性能监控平台
Constant Throughput Timer定时器
Gaussian Random Timer定时器
Groovy编写方法
Regular Expression Extractor正则表达式处理器
Arrivals Thread Group的使用
Ultimate Thread Group的使用
Constant Timer定时器
循环控制器Loop Controller
Modeule Controller和Include Controller
随机控制器Random Controller和Random Order Controller
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
继承、重写与重载
硬件性能监控平台
Constant Throughput Timer定时器
Gaussian Random Timer定时器
Regular Expression Extractor正则表达式处理器
Groovy编写方法
Arrivals Thread Group的使用
Ultimate Thread Group的使用
Constant Timer定时器
Modeule Controller和Include Controller
循环控制器Loop Controller
随机控制器Random Controller和Random Order Controller
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index b2775b4e0..b8110dcb5 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
逻辑控制器Simple Controller
事务控制器Transcation Controller
逻辑控制器If Controller
使用moko编写测试接口
jmeter对数据库进行增删改查
jmeter自动化压力测试
Jmeter之json数据提取和参数传递
Jmeter之全局参数设置和csv数据导入
Jmeter之静默压测
Jmeter之断言和聚合报告
测试必会的sql基本操作
开发获取用户列表的Post接口
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
逻辑控制器Simple Controller
事务控制器Transcation Controller
逻辑控制器If Controller
使用moko编写测试接口
jmeter对数据库进行增删改查
jmeter自动化压力测试
Jmeter之json数据提取和参数传递
Jmeter之全局参数设置和csv数据导入
Jmeter之静默压测
Jmeter之断言和聚合报告
测试必会的sql基本操作
开发获取用户列表的Post接口
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/4/index.html b/page/4/index.html index 6ae791642..8e3acd763 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
开发获得cookie的Post登录接口
开发时遇到端口冲突解决办法
接口开发环境部署
返回cookie的Get接口开发
需要参数才能访问的get请求
需要cookie访问的Get接口开发
使用docker的ubuntu容器安装code-server
性能监控平台
git提示Timed out的解决办法
使用Java解析Properties文件
java基础之方法和函数
关闭chrome浏览器自动更新
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
开发获得cookie的Post登录接口
开发时遇到端口冲突解决办法
接口开发环境部署
返回cookie的Get接口开发
需要cookie访问的Get接口开发
需要参数才能访问的get请求
使用docker的ubuntu容器安装code-server
性能监控平台
git提示Timed out的解决办法
使用Java解析Properties文件
java基础之方法和函数
关闭chrome浏览器自动更新
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/5/index.html b/page/5/index.html index 6a765a366..0b5110209 100644 --- a/page/5/index.html +++ b/page/5/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
自动化基础之Xpath定位
使用Postman如何做接口测试
解析Excel用于数据驱动
解析ini文件用于数据驱动
如何使用pyyaml获取yaml里面的数据
Shell函数
Shell工具(一)
Shell条件判断
Shell流程控制
Shell运算符
Shell工具(二)
Shell脚本入门
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
自动化基础之Xpath定位
使用Postman如何做接口测试
解析Excel用于数据驱动
解析ini文件用于数据驱动
Shell函数
Shell工具(一)
Shell条件判断
Shell流程控制
Shell运算符
Shell工具(二)
如何使用pyyaml获取yaml里面的数据
Shell脚本初探
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/6/index.html b/page/6/index.html index e9da22afd..9f0acf9f0 100644 --- a/page/6/index.html +++ b/page/6/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
Shell变量
Shell脚本初探
css教程一
使用pip install报错的解决办法
_3主3从的`Redis集群`搭建(下)
_3主3从的`Redis集群`搭建之哈希槽算法
_3主3从的`Redis集群`搭建(上)
_dockerfile
_mysql主从复制docker版
_主从容错切换迁移
docker 帮助启动类命令(一)
docker 帮助启动类命令(二)
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
Shell变量
Shell脚本入门
css教程一
_3主3从的`Redis集群`搭建(下)
_3主3从的`Redis集群`搭建之哈希槽算法
_3主3从的`Redis集群`搭建(上)
_dockerfile
_mysql主从复制docker版
docker 帮助启动类命令(一)
_主从容错切换迁移
docker 帮助启动类命令(二)
docker 镜像(一)
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/7/index.html b/page/7/index.html index e0f873c06..27b6bf299 100644 --- a/page/7/index.html +++ b/page/7/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
docker 镜像(一)
docker 镜像(二)
redis的3主3从扩容
redis的4主4从缩容
使用docker安装常用软件:mysql
使用docker安装常用软件:redis
使用docker安装常用软件:tomcat
容器数据卷
容器(一)
容器(三)
容器(二)
本地镜像发布到私有库
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
redis的3主3从扩容
docker 镜像(二)
redis的4主4从缩容
使用docker安装常用软件:mysql
使用docker安装常用软件:redis
使用docker安装常用软件:tomcat
容器数据卷
容器(一)
容器(二)
容器(三)
本地镜像发布到私有库
镜像
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/page/8/index.html b/page/8/index.html index e020d9d5c..f1e9a157f 100644 --- a/page/8/index.html +++ b/page/8/index.html @@ -1 +1 @@ -GGLSS - Research • 呓语
本地镜像发布到阿里云
镜像
Yaml的使用
性能测试主要关注点
使用jmeter录制压测
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +GGLSS - Research • 呓语
本地镜像发布到阿里云
使用pip install报错的解决办法
使用jmeter录制压测
Yaml的使用
性能测试主要关注点
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/1.html b/posts/1.html index b7627f1b1..6f4bceb53 100644 --- a/posts/1.html +++ b/posts/1.html @@ -1 +1 @@ -自动获取driver | GGLSS

自动获取driver

自动获取driver

chrome

下载驱动

1
2
3
4
5
6
7
8
9
10
11
12
13
@staticmethod
def down_driver(option):
'''
return: 返回driver,可以直接使用
'''
driver = webdriver.Chrome(
ChromeDriverManager(
url="https://registry.npmmirror.com/-/binary/chromedriver",
latest_release_url="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE",
cache_valid_range=365).install(),
options=option)
driver.delete_all_cookies()
return driver

下载2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@staticmethod
def determin_chrome_driver():

chrome_path = r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'


# 指定谷歌驱动目标位置
folder_path = os.path.join(ROOT_DIR, "env_setting")
# 驱动名称
file_name = 'chromedriver.exe'
# 路径拼接
file_path = os.path.join(folder_path, file_name)

if os.path.exists(file_path):
# 获取chromedriver.exe版本(谷歌浏览器驱动)
result = subprocess.run([file_path, '--version'], capture_output=True, text=True)
driverversion = '.'.join(result.stdout.strip().split(' ')[1].split('.')[:-1])

# 获取chrome.exe版本(谷歌浏览器)
command = f'wmic datafile where name="{chrome_path}" get Version /value'
result_a = subprocess.run(command, capture_output=True, text=True, shell=True)
output = result_a.stdout.strip()
chromeversion = '.'.join(output.split('=')[1].split('.')[0:3])

# 判断版本是否一致,不一致就重新下载
if driverversion != chromeversion:
# 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径
download_driver_path = ChromeDriverManager().install()
# 复制文件到目标位置
shutil.copy(download_driver_path, folder_path)
else:
print("版本一致,无需重新下载!")

else:
download_driver_path = ChromeDriverManager().install()
shutil.copy(download_driver_path, folder_path)

return file_path

edge

下载驱动

1
2
3
4
5
6
7
8
9
10
11
from webdriver_manager.microsoft import EdgeChromiumDriverManager

@staticmethod
def download_edgedriver():
'''
function:下载edge浏览器驱动
return: 返回一个下载的路径
'''
folder_path = EdgeChromiumDriverManager().install()
shutil.copy(folder_path, webDriver) # 拷贝folder_path到webDriver目录下
return folder_path

使用

1
2
# driver = webdriver.Edge(service=Service(下载路径))
driver = webdriver.Edge(service=Service(ddDriver.download_edgedriver()))

firefox

下载驱动

1
2
3
4
5
6
7
8
9
10
@staticmethod
def down_driver(option):
driver = webdriver.Firefox
(
service=FirefoxService(GeckoDriverManager(url="https://github.com/mozilla/geckodriver/releases/download",
latest_release_url="https://api.github.com/repos/mozilla/geckodriver/"
"releases/latest",
cache_valid_range=365).install(),
options=option))
return driver
文章作者: gglss
文章链接: http://example.com/posts/1.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +自动获取driver | GGLSS

自动获取driver

自动获取driver

chrome

下载驱动

1
2
3
4
5
6
7
8
9
10
11
12
13
@staticmethod
def down_driver(option):
'''
return: 返回driver,可以直接使用
'''
driver = webdriver.Chrome(
ChromeDriverManager(
url="https://registry.npmmirror.com/-/binary/chromedriver",
latest_release_url="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE",
cache_valid_range=365).install(),
options=option)
driver.delete_all_cookies()
return driver

下载2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@staticmethod
def determin_chrome_driver():

chrome_path = r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'


# 指定谷歌驱动目标位置
folder_path = os.path.join(ROOT_DIR, "env_setting")
# 驱动名称
file_name = 'chromedriver.exe'
# 路径拼接
file_path = os.path.join(folder_path, file_name)

if os.path.exists(file_path):
# 获取chromedriver.exe版本(谷歌浏览器驱动)
result = subprocess.run([file_path, '--version'], capture_output=True, text=True)
driverversion = '.'.join(result.stdout.strip().split(' ')[1].split('.')[:-1])

# 获取chrome.exe版本(谷歌浏览器)
command = f'wmic datafile where name="{chrome_path}" get Version /value'
result_a = subprocess.run(command, capture_output=True, text=True, shell=True)
output = result_a.stdout.strip()
chromeversion = '.'.join(output.split('=')[1].split('.')[0:3])

# 判断版本是否一致,不一致就重新下载
if driverversion != chromeversion:
# 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径
download_driver_path = ChromeDriverManager().install()
# 复制文件到目标位置
shutil.copy(download_driver_path, folder_path)
else:
print("版本一致,无需重新下载!")

else:
download_driver_path = ChromeDriverManager().install()
shutil.copy(download_driver_path, folder_path)

return file_path

edge

下载驱动

1
2
3
4
5
6
7
8
9
10
11
from webdriver_manager.microsoft import EdgeChromiumDriverManager

@staticmethod
def download_edgedriver():
'''
function:下载edge浏览器驱动
return: 返回一个下载的路径
'''
folder_path = EdgeChromiumDriverManager().install()
shutil.copy(folder_path, webDriver) # 拷贝folder_path到webDriver目录下
return folder_path

使用

1
2
# driver = webdriver.Edge(service=Service(下载路径))
driver = webdriver.Edge(service=Service(ddDriver.download_edgedriver()))

firefox

下载驱动

1
2
3
4
5
6
7
8
9
10
@staticmethod
def down_driver(option):
driver = webdriver.Firefox
(
service=FirefoxService(GeckoDriverManager(url="https://github.com/mozilla/geckodriver/releases/download",
latest_release_url="https://api.github.com/repos/mozilla/geckodriver/"
"releases/latest",
cache_valid_range=365).install(),
options=option))
return driver
文章作者: gglss
文章链接: http://example.com/posts/1.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/11783.html b/posts/11783.html index 33058c547..b7f5f2984 100644 --- a/posts/11783.html +++ b/posts/11783.html @@ -1 +1 @@ -测试必会的sql基本操作 | GGLSS

测试必会的sql基本操作

1、创建数据库
1
2
create database 数据库名;
create database 数据库名 character set 字符集;
2、查看全部的数据库
1
show databases;   

3、查看某个数据库的定义的信息:

1
show create database 数据库名;         
4、删除数据库
1
drop database 数据库名称;

5、切换数据库:

1
use 数据库名;

6、查看正在使用的数据库:

1
select database();          

7、查看数据库中的所有表:

1
show tables;

8、查看表结构:

1
desc 表名;    

9、修改表删除列.

1
alter table 表名 drop 列名;            

10、修改表名

1
rename table 表名 to 新表名;              

11、修改表的字符集

1
alter table 表名 character set 字符集;

12、数据类型与约束

  • int :整数 有符号和无符号,长度不受限制
  • varchar:字符串 中文/数字/字母都是一字字符,受长度限制
  • decimal :小数 decimal(5,2)总长度5位,整数3位,小数2位
  • 主键 id :int unsigned primary key auto_increment
  • 非空 :not null
  • 唯一 :unique
  • 默认 :default

SQL中表的操作

1、创建表

1
create table 表名(字段名 类型 约束,.....)

2、删除表

1
2
drop table 表名
drop table if exists 表名

3、表数据操作

3.1、添加数据
1
2
insert into 表名 values(值1,值2...)给表中所有字段插入数据
insert into 表名(字段2,字段1values(值2,值1
3.2、修改数据
1
2
update 表名 set 字段1=1,字段2=2 where 条件
isdelete 逻辑删除
3.3、删除数据
1
delete from 表名 where 条件
3.4、查询数据
  • 3.4.1、查询表中所有信息
    1
    select * from 表名 where 条件
  • 3.4.2、查询表中指定字段
    1
    select 字段1,字段2,字段3...from 表名 where 条件
  • 3.4.3、给字段取别名
    1
    select 字段1as) 别名,字段2 别名 from 表名 where 条件
  • 3.4.4、去重
    1
    select distinct 字段 from 表名 where 条件
  • 3.4.5、比较运算符
    1
    select * from 表名 where age>20
  • 3.4.6、逻辑运算符
    • and 满足所有条件

    • or 满足其中任意一个条件

    • not 不满足条件

  • 3.4.7、模糊查询
    • like
    • % 0到任意多个字符
    • _表示任意一个字符
  • 3.4.8、范围查询
    • in 在一个非连续的范围内
    • between and 在一个连续的范围内 闭区间 小的数据在前
  • 3.4.9、空查询
    • is null
    • ‘’空字符串
3.5、多表查询
  • 3.5.1、排序

    1
    2
    select * from 表名 where 条件 order by1asc|desc,列2 asc|desc
    select * from student where 条件 order by convert(字段 using gbk)asc|desc 纯中文转换后排序
  • 3.5.2、聚合函数

    1
    2
    3
    4
    5
    6
    count: 总数 select count(*/字段)from 表名 where 条件 
    max: 最大值 select max(age) from 表名 where 条件
    min: 最小值 select min(age) from 表名 where 条件
    avg: 平均值 select avg(grade) from 表名 where 条件
    sum: 求和 select sum(grade) from 表名 where 条件
    select avg(age)as 平均年龄,max(age)最大年龄,min(age)最小年龄 from 表名 where 条件
  • 3.5.3、分组

    1
    select * from 表名 group by 字段,字段2 having 条件
  • 3.5.4、分页

    1
    2
    select * from 表名 limit 05 从第一行数据开始,显示5
    select * from 表名 limit (n-1*m,m n代表第几页,m代表每页显示多少条数据
  • 3.5.5、等值连接

    1
    2
    3
    4
    方式一 :
    select * from1,表2,表3 where1.=2.and2.=3.where 条件
    方式二 内连接 取交集:
    select * from1 inner join2 on1.=2.inner join3 on2.=3.where 条件
  • 3.5.6、左连接

    左边的表全显示,右边表能匹配的上的数据连接显示,匹配不上(没有的)以null补充

    1
    select * from1 left join2 on1.=2.left join3 on2.=3.where 条件
  • 3.5.7、右连接

    右边的表全显示,左边表能匹配上的数据连接显示,匹配不上(没有的)以null补充

    1
    select * from1 right join2 on1.=2.right join3 on2.=3.where 条件
  • 3.5.8、自关联

    1
    select * from 表 别名1 inner join 表 别名2 on 别名1.aid=别名2.pid
  • 3.5.9、子查询
    • 标量子查询

    子查询结果输出的是一行一列

    1
    select * from student where age>(select avg(age) from student)
    • 列子查询

    子查询的结果输出的是一列多行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    in:  
    select * from student where age in
    (select age from student where age=18)

    any/some: >:大于最小的; <: 小于最大的
    select * from student where age>/< any
    (select age from student where age between 18 and 22)

    all: >:大于最大的; <: 小于最小的
    select * from student where age>/<all
    (select age from student where age between 18 and 22
    • 行子查询

    子查询的结果输出的是一行多列

    1
    select * from student where(name,sex)=select name,sex from student where sex='男' order by age desc limit 1
    • 表子查询

    子查询的输出结果是一个表

    1
    select * from scores inner joinselect cno from courses where cname in('数据库',‘系统测试’) as c on scores.cno=c.cno
3.6、数据分表
1
2
3
4
5
insert into goods_cate(cate_name) select distinct cate from goods;

create table goods_cate (id int unsigned primary key auto_incremen,cate varchar(10)) select distinct cate from goods;

update goods inner join goods_cate on goods_cate.cate=goods.cate set goods.cate=goods_cate.id
文章作者: gglss
文章链接: http://example.com/posts/11783.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +测试必会的sql基本操作 | GGLSS

测试必会的sql基本操作

1、创建数据库
1
2
create database 数据库名;
create database 数据库名 character set 字符集;
2、查看全部的数据库
1
show databases;   

3、查看某个数据库的定义的信息:

1
show create database 数据库名;         
4、删除数据库
1
drop database 数据库名称;

5、切换数据库:

1
use 数据库名;

6、查看正在使用的数据库:

1
select database();          

7、查看数据库中的所有表:

1
show tables;

8、查看表结构:

1
desc 表名;    

9、修改表删除列.

1
alter table 表名 drop 列名;            

10、修改表名

1
rename table 表名 to 新表名;              

11、修改表的字符集

1
alter table 表名 character set 字符集;

12、数据类型与约束

  • int :整数 有符号和无符号,长度不受限制
  • varchar:字符串 中文/数字/字母都是一字字符,受长度限制
  • decimal :小数 decimal(5,2)总长度5位,整数3位,小数2位
  • 主键 id :int unsigned primary key auto_increment
  • 非空 :not null
  • 唯一 :unique
  • 默认 :default

SQL中表的操作

1、创建表

1
create table 表名(字段名 类型 约束,.....)

2、删除表

1
2
drop table 表名
drop table if exists 表名

3、表数据操作

3.1、添加数据
1
2
insert into 表名 values(值1,值2...)给表中所有字段插入数据
insert into 表名(字段2,字段1values(值2,值1
3.2、修改数据
1
2
update 表名 set 字段1=1,字段2=2 where 条件
isdelete 逻辑删除
3.3、删除数据
1
delete from 表名 where 条件
3.4、查询数据
  • 3.4.1、查询表中所有信息
    1
    select * from 表名 where 条件
  • 3.4.2、查询表中指定字段
    1
    select 字段1,字段2,字段3...from 表名 where 条件
  • 3.4.3、给字段取别名
    1
    select 字段1as) 别名,字段2 别名 from 表名 where 条件
  • 3.4.4、去重
    1
    select distinct 字段 from 表名 where 条件
  • 3.4.5、比较运算符
    1
    select * from 表名 where age>20
  • 3.4.6、逻辑运算符
    • and 满足所有条件

    • or 满足其中任意一个条件

    • not 不满足条件

  • 3.4.7、模糊查询
    • like
    • % 0到任意多个字符
    • _表示任意一个字符
  • 3.4.8、范围查询
    • in 在一个非连续的范围内
    • between and 在一个连续的范围内 闭区间 小的数据在前
  • 3.4.9、空查询
    • is null
    • ‘’空字符串
3.5、多表查询
  • 3.5.1、排序

    1
    2
    select * from 表名 where 条件 order by1asc|desc,列2 asc|desc
    select * from student where 条件 order by convert(字段 using gbk)asc|desc 纯中文转换后排序
  • 3.5.2、聚合函数

    1
    2
    3
    4
    5
    6
    count: 总数 select count(*/字段)from 表名 where 条件 
    max: 最大值 select max(age) from 表名 where 条件
    min: 最小值 select min(age) from 表名 where 条件
    avg: 平均值 select avg(grade) from 表名 where 条件
    sum: 求和 select sum(grade) from 表名 where 条件
    select avg(age)as 平均年龄,max(age)最大年龄,min(age)最小年龄 from 表名 where 条件
  • 3.5.3、分组

    1
    select * from 表名 group by 字段,字段2 having 条件
  • 3.5.4、分页

    1
    2
    select * from 表名 limit 05 从第一行数据开始,显示5
    select * from 表名 limit (n-1*m,m n代表第几页,m代表每页显示多少条数据
  • 3.5.5、等值连接

    1
    2
    3
    4
    方式一 :
    select * from1,表2,表3 where1.=2.and2.=3.where 条件
    方式二 内连接 取交集:
    select * from1 inner join2 on1.=2.inner join3 on2.=3.where 条件
  • 3.5.6、左连接

    左边的表全显示,右边表能匹配的上的数据连接显示,匹配不上(没有的)以null补充

    1
    select * from1 left join2 on1.=2.left join3 on2.=3.where 条件
  • 3.5.7、右连接

    右边的表全显示,左边表能匹配上的数据连接显示,匹配不上(没有的)以null补充

    1
    select * from1 right join2 on1.=2.right join3 on2.=3.where 条件
  • 3.5.8、自关联

    1
    select * from 表 别名1 inner join 表 别名2 on 别名1.aid=别名2.pid
  • 3.5.9、子查询
    • 标量子查询

    子查询结果输出的是一行一列

    1
    select * from student where age>(select avg(age) from student)
    • 列子查询

    子查询的结果输出的是一列多行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    in:  
    select * from student where age in
    (select age from student where age=18)

    any/some: >:大于最小的; <: 小于最大的
    select * from student where age>/< any
    (select age from student where age between 18 and 22)

    all: >:大于最大的; <: 小于最小的
    select * from student where age>/<all
    (select age from student where age between 18 and 22
    • 行子查询

    子查询的结果输出的是一行多列

    1
    select * from student where(name,sex)=select name,sex from student where sex='男' order by age desc limit 1
    • 表子查询

    子查询的输出结果是一个表

    1
    select * from scores inner joinselect cno from courses where cname in('数据库',‘系统测试’) as c on scores.cno=c.cno
3.6、数据分表
1
2
3
4
5
insert into goods_cate(cate_name) select distinct cate from goods;

create table goods_cate (id int unsigned primary key auto_incremen,cate varchar(10)) select distinct cate from goods;

update goods inner join goods_cate on goods_cate.cate=goods.cate set goods.cate=goods_cate.id
文章作者: gglss
文章链接: http://example.com/posts/11783.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/12080.html b/posts/12080.html index eeafd4fc0..360ff1233 100644 --- a/posts/12080.html +++ b/posts/12080.html @@ -1 +1 @@ -解析Excel用于数据驱动 | GGLSS

解析Excel用于数据驱动

新建Excel

创建Excel数据表:learn.xlsx

解析excel

使用python的openpyxl模块来解析Excel

1、读取Excel文件

openpyxl.load_workbook(‘文件路径’)

1
excel = openpyxl.load_workbook('learn.xlsx')

2、获取sheet页里面的数据

1
2
3
4
5
6
# 获取当前活动的表单
sheet = excel.active
# 获取指定的表单
for sheets in excel.sheetnames: #获取所有表单的名称
print(sheets)
sheet = excel[sheets] #获取指定表单

3、获取单元格里面的内容

1
2
3
for values in sheet.values:
if type(value[0]) == int: #从第二行开始
print(values)

运行代码:

把Excel表里面的数据以字典格式展示:

1
2
3
4
data = {}
data["name"] = values[0]
data["value"] = values[1]
print(data)

运行代码:

文章作者: gglss
文章链接: http://example.com/posts/12080.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +解析Excel用于数据驱动 | GGLSS

解析Excel用于数据驱动

新建Excel

创建Excel数据表:learn.xlsx

解析excel

使用python的openpyxl模块来解析Excel

1、读取Excel文件

openpyxl.load_workbook(‘文件路径’)

1
excel = openpyxl.load_workbook('learn.xlsx')

2、获取sheet页里面的数据

1
2
3
4
5
6
# 获取当前活动的表单
sheet = excel.active
# 获取指定的表单
for sheets in excel.sheetnames: #获取所有表单的名称
print(sheets)
sheet = excel[sheets] #获取指定表单

3、获取单元格里面的内容

1
2
3
for values in sheet.values:
if type(value[0]) == int: #从第二行开始
print(values)

运行代码:

把Excel表里面的数据以字典格式展示:

1
2
3
4
data = {}
data["name"] = values[0]
data["value"] = values[1]
print(data)

运行代码:

文章作者: gglss
文章链接: http://example.com/posts/12080.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/12932.html b/posts/12932.html index be0dd43f8..4f025ea76 100644 --- a/posts/12932.html +++ b/posts/12932.html @@ -1 +1 @@ -逻辑控制器If Controller | GGLSS

逻辑控制器If Controller

逻辑控制器If Controller

文章作者: gglss
文章链接: http://example.com/posts/12932.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +逻辑控制器If Controller | GGLSS

逻辑控制器If Controller

逻辑控制器If Controller

文章作者: gglss
文章链接: http://example.com/posts/12932.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/1351.html b/posts/1351.html index ba4472925..476566242 100644 --- a/posts/1351.html +++ b/posts/1351.html @@ -1 +1 @@ -容器数据卷 | GGLSS

容器数据卷

容器数据卷

运行带有容器数据卷的容器实例

1
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

举个栗子

宿主vs容器之间映射添加容器卷

  • 使用docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 添加
1
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ui ubuntu
  • 查看数据卷是否挂载成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
`在容器内部创建一个dockerin.txt文件
root@48955acecd79:/tmp/docker_data# touch dockerin.txt
root@48955acecd79:/tmp/docker_data# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 28 09:21 ./
drwxrwxrwt 1 root root 4096 Apr 28 09:18 ../
-rw-r--r-- 1 root root 0 Apr 28 09:21 dockerin.txt
`在宿主机目录下查看该文件
root@48955acecd79:/tmp/docker_data# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /tmp/host_data/
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 28 17:21 dockerin.txt
`在宿主机创建一个文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# touch host.txt

`在容器查看文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# docker exec -it 48955acecd79 bash
root@48955acecd79:/# cd /tmp/docker_data/

+ 容器和宿主机之间数据共享

[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell

+ 主机修改,docker同步获得

+ docker容器stop,主机修改,docker容器重启数据同步

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d

+ 默认是可读可写的

```shell
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
  • 修改成容器只读
1
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

卷的继承和共享

  • 容器1完成和宿主机的映射
    • 容器2继承容器1,则容器2操作后同步到容器1和宿主机
    • 宿主机操作同步到容器1,容器2
    • 容器1操作同步到宿主机,容器2
1
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
文章作者: gglss
文章链接: http://example.com/posts/1351.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +容器数据卷 | GGLSS

容器数据卷

容器数据卷

运行带有容器数据卷的容器实例

1
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

举个栗子

宿主vs容器之间映射添加容器卷

  • 使用docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 添加
1
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ui ubuntu
  • 查看数据卷是否挂载成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
`在容器内部创建一个dockerin.txt文件
root@48955acecd79:/tmp/docker_data# touch dockerin.txt
root@48955acecd79:/tmp/docker_data# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 28 09:21 ./
drwxrwxrwt 1 root root 4096 Apr 28 09:18 ../
-rw-r--r-- 1 root root 0 Apr 28 09:21 dockerin.txt
`在宿主机目录下查看该文件
root@48955acecd79:/tmp/docker_data# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /tmp/host_data/
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 28 17:21 dockerin.txt
`在宿主机创建一个文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# touch host.txt

`在容器查看文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# docker exec -it 48955acecd79 bash
root@48955acecd79:/# cd /tmp/docker_data/

+ 容器和宿主机之间数据共享

[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell

+ 主机修改,docker同步获得

+ docker容器stop,主机修改,docker容器重启数据同步

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d

+ 默认是可读可写的

```shell
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
  • 修改成容器只读
1
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

卷的继承和共享

  • 容器1完成和宿主机的映射
    • 容器2继承容器1,则容器2操作后同步到容器1和宿主机
    • 宿主机操作同步到容器1,容器2
    • 容器1操作同步到宿主机,容器2
1
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
文章作者: gglss
文章链接: http://example.com/posts/1351.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/13844.html b/posts/13844.html index 1cc3313e7..1f12a6aa5 100644 --- a/posts/13844.html +++ b/posts/13844.html @@ -1 +1 @@ -_dockerfile | GGLSS

_dockerfile

_dockerfile

以dockerfile的方法来进行对centos的具有vim,ifconfig和jdk8的镜像

创建myfile文件夹

创建Dockerfile文件

注意:jdk8需要和Dockerfile放到同一个文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FROM centos:7												
MAINTAINER zzyy<zzyybs@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

创建好Dockerfile后,运行docker build -t 新镜像名称:Tag .

注意:Tag后面有个空格,有个点

虚悬镜像

仓库名和标签名全部为的镜像

碰到它还是进行删除的好

使用docker image ls -f dangling=true查找虚悬镜像

使用docker image prune删除镜像

文章作者: gglss
文章链接: http://example.com/posts/13844.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +_dockerfile | GGLSS

_dockerfile

_dockerfile

以dockerfile的方法来进行对centos的具有vim,ifconfig和jdk8的镜像

创建myfile文件夹

创建Dockerfile文件

注意:jdk8需要和Dockerfile放到同一个文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FROM centos:7												
MAINTAINER zzyy<zzyybs@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

创建好Dockerfile后,运行docker build -t 新镜像名称:Tag .

注意:Tag后面有个空格,有个点

虚悬镜像

仓库名和标签名全部为的镜像

碰到它还是进行删除的好

使用docker image ls -f dangling=true查找虚悬镜像

使用docker image prune删除镜像

文章作者: gglss
文章链接: http://example.com/posts/13844.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/13923.html b/posts/13923.html index 464087120..80bda1c30 100644 --- a/posts/13923.html +++ b/posts/13923.html @@ -1,2 +1,2 @@ 长难句一 | GGLSS

长难句一

原句

1
2
3
4
5
6
7
		Curbs on business-method claims would be a dramatic about-face, because it was the 

Federal Circuit itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

【2010英语一Text2】

提取单词

business: 商业

claim: 宣称,声称,断言

dramatic: 巨大而广阔的

about-face: n. (思想、态度、行为等)彻底改变; v. 向后转(同 about-turn)

federal: adj. 联邦的,政府的

分割

Curbs on business-method claims would be a dramatic about-face, because it was the Federal Circuit itself that introduced such patents with its 1998 decision in the so-called State Street Bank case,

1
<span style="font-size:2rem; background:yellow; color:red;">**Bang! Bang! Banki Banki Seiki Banki!**</span>

State Street Bank case,

 Curbs on business-method <font color=#0d26e5>claims</font> would be a dramatic about-face, because it was the  Federal Circuit 
-

itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

文章作者: gglss
文章链接: http://example.com/posts/13923.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +

itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

文章作者: gglss
文章链接: http://example.com/posts/13923.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
avatar
gglss
Follow Me
公告
好好学习,天天向上
最新文章
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/15488.html b/posts/15488.html index 4213c7246..0561dff8b 100644 --- a/posts/15488.html +++ b/posts/15488.html @@ -1 +1 @@ -事务控制器Transcation Controller | GGLSS

事务控制器Transcation Controller

作用

一个事务会包含并请求,然后查看一个事务的QPS等性能指标

指标

QPS:每秒处理完请求的次数,具体指1s内发出请求到服务器处理完成并返回结果的次数

TPS:每秒处理完的事务次数,一般TPS是对整个系统来讲的,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能对应多个请求,对于衡量单个接口服务的处理能力,一般使用QPS

参数

  • Generate Parent sample:生成父样例,就是控制器里面的请求不展示

没有选中Generate Parent sample,运行后的结果是

选中后`Generate Parent sample`,运行后的结果是
文章作者: gglss
文章链接: http://example.com/posts/15488.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +事务控制器Transcation Controller | GGLSS

事务控制器Transcation Controller

作用

一个事务会包含并请求,然后查看一个事务的QPS等性能指标

指标

QPS:每秒处理完请求的次数,具体指1s内发出请求到服务器处理完成并返回结果的次数

TPS:每秒处理完的事务次数,一般TPS是对整个系统来讲的,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能对应多个请求,对于衡量单个接口服务的处理能力,一般使用QPS

参数

  • Generate Parent sample:生成父样例,就是控制器里面的请求不展示

没有选中Generate Parent sample,运行后的结果是

选中后`Generate Parent sample`,运行后的结果是
文章作者: gglss
文章链接: http://example.com/posts/15488.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/15521.html b/posts/15521.html index b45d02128..ab49ce5f0 100644 --- a/posts/15521.html +++ b/posts/15521.html @@ -1 +1 @@ -需要cookie访问的Get接口开发 | GGLSS

需要cookie访问的Get接口开发

编写需要cookie才能访问的接口

这个接口还是在MyGetMethod类里面编写方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 要求客户端携带cookie访问
* 这是一个需要携带cookies信息才能访问的get请求
*/
@RequestMapping(value = "/get/with/cookies", method = RequestMethod.GET)
@ApiOperation(value = "要求客户端携带cookie访问", httpMethod = "GET")
public String getWithCookies(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(Objects.isNull(cookies)){
return "你必须携带cookies信息来";
}
for(Cookie cookie : cookies){
if(cookie.getName().equals("login") && cookie.getValue().equals("True")){
return "恭喜你,访问成功!,这是一个需要携带cookies信息才能访问的get请求";
}
}
return "你必须携带cookies信息来";
}
文章作者: gglss
文章链接: http://example.com/posts/15521.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +需要cookie访问的Get接口开发 | GGLSS

需要cookie访问的Get接口开发

编写需要cookie才能访问的接口

这个接口还是在MyGetMethod类里面编写方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 要求客户端携带cookie访问
* 这是一个需要携带cookies信息才能访问的get请求
*/
@RequestMapping(value = "/get/with/cookies", method = RequestMethod.GET)
@ApiOperation(value = "要求客户端携带cookie访问", httpMethod = "GET")
public String getWithCookies(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(Objects.isNull(cookies)){
return "你必须携带cookies信息来";
}
for(Cookie cookie : cookies){
if(cookie.getName().equals("login") && cookie.getValue().equals("True")){
return "恭喜你,访问成功!,这是一个需要携带cookies信息才能访问的get请求";
}
}
return "你必须携带cookies信息来";
}
文章作者: gglss
文章链接: http://example.com/posts/15521.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/16468.html b/posts/16468.html index 53e631cb0..30fe3ad73 100644 --- a/posts/16468.html +++ b/posts/16468.html @@ -1 +1 @@ -包装类 | GGLSS

包装类

  • 基本数据类型对应的包装类
基本数据类型包装类大小(字节)
byteByte1–(-128~127)
shortShort2–(-32768~32767)
intInteger4
longLong8
floatFloat4
doubleDouble8
charCharacter2
booleanBoolean1

包装类方法

  • Integer的作用主要是对int、Integer、String几种类型的数据进行转换,还能获取一些常量
方法描述
compareTo()用于将对象与方法的参数进行比较(相同类型)
decode()将方法的参数转为包装类对象
equals()判断对象是否与参数相等
Integer.parseInt(“字符串’)将字符串转为Int类型
Integer.toString(int数据)将Int类型转为字符串

compareTo()方法

  • 如果指定的数与参数相等返回 0。
  • 如果指定的数小于参数返回 -1。
  • 如果指定的数大于参数返回 1。
文章作者: gglss
文章链接: http://example.com/posts/16468.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +包装类 | GGLSS

包装类

  • 基本数据类型对应的包装类
基本数据类型包装类大小(字节)
byteByte1–(-128~127)
shortShort2–(-32768~32767)
intInteger4
longLong8
floatFloat4
doubleDouble8
charCharacter2
booleanBoolean1

包装类方法

  • Integer的作用主要是对int、Integer、String几种类型的数据进行转换,还能获取一些常量
方法描述
compareTo()用于将对象与方法的参数进行比较(相同类型)
decode()将方法的参数转为包装类对象
equals()判断对象是否与参数相等
Integer.parseInt(“字符串’)将字符串转为Int类型
Integer.toString(int数据)将Int类型转为字符串

compareTo()方法

  • 如果指定的数与参数相等返回 0。
  • 如果指定的数小于参数返回 -1。
  • 如果指定的数大于参数返回 1。
文章作者: gglss
文章链接: http://example.com/posts/16468.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/1672051471.html b/posts/1672051471.html index 05fae80cb..41ad72cbe 100644 --- a/posts/1672051471.html +++ b/posts/1672051471.html @@ -1 +1 @@ -真正厉害的人都戒掉了玻璃心 | GGLSS

真正厉害的人都戒掉了玻璃心

I grew up with my identical twin, who was an incredibly loving brother. Now, one thing about being a twin is, it makes you an expert at spotting favoritism. If his cookie was even slightly bigger than my cookie, I had questions. And clearly, I wasn’t starving

我和我的双胞胎哥哥一起长大,他是个富有爱心的好兄弟。要知道,作为双胞胎,你很快 就在一件事上成为专家,就是注意到偏爱。如果他的饼干比我的大 哪怕一点点,我就会质疑。当然我也没被饿着。

identical adj.相同的

slightly adv.轻微地

psychologist n心理学家


When I became a psychologist, I began to notice favoritism of a different kind; and that is, how much more we value the body than we do the mind. I spent nine years at university earning my favoritism doctorate in psychology, and I can’t tell you how many people look at my business card and say, “Oh - - a psychologist. So, not a real doctor,” as if it should say that on my card. This favoritism doctorate we show the body over the mind - - I see it everywhere.

当我成为一-个心理学家,我开始 注意到另一种不同的偏爱,那就是我们赋子我们的身体 比精神更多的价值。我花了九年时问 获得心理学博士学位,但不知道有多少人看了我的名片说,“哦,心理学家,原水不是真正的医生。”就好像我的名片上就该明确说明似的。这种对身体多于精神的偏爱随处可见。

psychologist n.心理学家

doctorate n.博士学位

favoritism n.偏袒


I recently was at a friend’s house, and their fivc-year-old was getting ready for bed. He was standing on a stool by the sink, brushing his teeth, when he slipped and scratched his leg on the stool when he fell. He cried for a minute, but then he got back up, got back on the stool, and reached out for a box of BandAids to put one on his cut.


Now, this kid could barely tie his shoelaces, but he knew you have to cover a cut so it doesn’t become infected, and you have to care for your teeth by brushing twice a day. We all know how to maintain our physical health and how to practice dental hygiene, right? We’ve known it since we were five years old. But what do we know about maintaining our psychological health? Well, nothing. What do we teach our children about emotional hygiene? Nothing. How is it that we spend more time taking care of our teeth than we do our minds? Why is it that our physical health is so much more important to us than our psychological health?

这孩子刚学会系鞋带儿,但他都知道要保护伤口以免感染,同时还要一天刷两次牙来保护牙齿。我们都知道怎样保特身体的健康 还有怎样保持牙齿卫生,对不对:我们从五岁起就知道这些东西了。但是我们知道怎样 保持精神上的健康吗?完全不知道。我们教给孩子们情绪保健吗?完全没有。为什么我们花在牙齿的时间 比花在精神的时间上还多呢? 为什么我们那么重视身体健康 远远多于心理健康呢?


We sustain psychological injuries even more often than we do physical ones, injuries like failure or rejection or loneliness. And they can also get worse if we ignore them, and they can impact our lives in dramatic ways. And yet, even though there are scientifically proven techniques we could use to treat these kinds of psychological injuries, we don’t. It doesn’t even occur to us that we should. “Oh, you’re feeling depressed? Just shake it off; it’s all in your head.” Can you imagine saying that to somebody with a broken leg: “Oh, just walk it off; it’s all in vour leg.”

我们承受心理上的伤害 比身体上的多得多,例如失败,被拒绝,孤独。如果我们忽视它们,情况也会恶化,它们同样会给我们的生活带米重大的影响。然而,虽然有科学证实的疗法 米帮助我们治疗 这些心理上的伤害,我们却不采取行动。我们甚至都没意识到 我们应该采取行动。“哦,你感到抑郁么? 别去想了,都在你脑袋甲。”你能想象对一个骨折了的人说这样的话吗?“哦、走走就好了,都在你腿上。


It is time we closed the gap between our physical and our psychological health. It’s time we made them more equal, more like twins.Speaking of which, my brother is aiso a psychologist. So he’s not a real doctor, either.

我们应该消除这种对身体和 精神健康的区别对待。应该把两者对等起水,像双胞胎一样。说起双胞胎,我哥哥也是个心理医生。所以他也不是真正的医生。


We didn’t study together, though. In fact, the hardest thing I’ve ever done in my life is move across the Atlantic to New York City to get my doctorate in psychology. We were apart then for the first time in our lives, and the separation was brutal for both of us. But while he remained among family and friends, I was alone in a new country. We missed each other terribly, but international phone calls were really expensive then, and we could only afford to speak for five minutes a week. When our birthday rolled around, it was the first we wouldn’t be spending together. We decided to splurge, and that week, we would talk for 10 minutes.

我们不是在一起上的学。事实上,我这辈子经历过的最困难的事就是跨过大西洋搬到红约 来读心理学的博士学位。那是我们俩第一次分隔两地,这个分离对我俩来说都很残酷。当他和家人朋友一起

吋,我却孤单的在—-个新的国度。我们都非常想念对方,但那吋候国际长途都很贵 我们一周只打的起五分钟的电话。当我们生日快到了的时候,那是我们第一个 没在一起过的生日。我们决定奢侈把,在那个星期聊上十分钟。


I spent the morning pacing around my room, waiting for him to call – and waiting.. and waiting. But the phone didn’t ring

我那天早上在房间里踱来踱去,等着我哥哥给我打过来 - 我等啊等啊,电话就是不响。


Given the time difference, I assumed, “OK, he’s out with friends. he’ll call later.” There were no cell phones then. But he didn’t. And I began to realize that after being away for over 10 months, he no longer missed me the way I missed him. I knew he would call in the morning, but that night was one of the saddest and longest nights of my life. I woke up the next morning. I glanced down at the phone, and I realized I had kicked it off the hook when pacing the day before. I stumbled out of bed, I put the phone back on the receiver, and it rang a second later. And it was my brother, and boy, was he pissed.

由于时差的关系,我就想,“好吧,他一定是和朋友在一起,他晚点 v绊倒儿会打水的。”那时候也没有手机。但他始终没打来。我开妤意识到,在我商开十个月以后,他不再像我想他那样想我了。我知道他早上会打米,但那一晚是我一生中 最份心,最漫长的一晚。第二天一早醒来,我职了一-眼电话,我意识到,来回跛步吋 我把电话线踹下水了我迷迷糊糊的跳下床,我刚把电话插回接口,一秒钟之后电话就响了。是我哥哥,他可气坏了。


It was the saddest and longest night of his life as well. Now, I tried to explain what happened, but he said, “I don’t understand. If you saw I wasn’t calling you, why didn’t you just pick up the phone and call me?” He was right. Why didn’t I call him? I didn’t have an answer then. But I do today, and it’s a simple one: loneliness.

那也是他一生中 最伤心漫长的一夜。当我跟他解释事情的经过,他说,“我不明白。你看我没给你打,你为什么不打给我呢?”他说的对。我为什么不打给他呢?我当时无法解释,但我现在明白了,非常简单的原因:孤独。


Loneliness creates a deep psychological wound, one that distorts our perceptions and scrambies our thinking. It makes us believe that those around us care much less than they actuaily do. It make us really afraid to reach out, because why set yourself up for reiection and heartache when your heart is already aching more than you can stand? I was in the grips of real loneliness back then, but I was surrounded by people all day, so it never occurred to me. But loneliness is defined purely subjectively. It depends solely on whether you feel emotionally or socially disconnected from those around you. And I did.

孤独导致深重的心理创伤,扭曲我们的感知能力,剥夺我们的思考能力。它使我们相信 身边的人不再在乎我们。 它使我们不取与人联络,为什么给自取其辱被拒绝呢? 你的心痛的还不够多么?我那个时候被孤独紧紧包裹着,但我总和别人在一起,我自己都没意识到。但孤独是完全从主观上定义的。它完全取决于你是否觉得 在情绪上或是交际上 和你周围的人相隔绝。我当时是这样的。


There is a lot of research on loneliness, and all of it is horrifying.

Loneliness won’t just make you miserable; it will kill you. I’m

not kidding. Chronic loneliness increases your likelihood of an early death by 14 percent. Fourteen percent! Loneliness causes high blood pressure, high cholesterol. It even suppress the functioning of your immune system, making you vulnerable to

cholesterol

n胆固醇

all kinds of illnesses and diseases. In fact. scientists have concluded that taken together, chronic loneliness poses as significant a risk for your long-term health and longevity as

vulnerable

adi.脆弱的

cigarette smoking.

我们有很多关于孤独的研究, 都很可怕。孤独不仅让你觉得凄惨,它还可能致死。我可不是开玩笑。长期的抓独 会增加你早逝的可能性 高达14%之多。孤独可能导致 高血乐,高胆固醇。它甚至会影响你的免疫系统,使你容易患上各种疾病。事实上,科学家已经得出结论,长期的孤独对你的健康和长寿的负面影响比抽烟还要糟。

文章作者: gglss
文章链接: http://example.com/posts/1672051471.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +真正厉害的人都戒掉了玻璃心 | GGLSS

真正厉害的人都戒掉了玻璃心

I grew up with my identical twin, who was an incredibly loving brother. Now, one thing about being a twin is, it makes you an expert at spotting favoritism. If his cookie was even slightly bigger than my cookie, I had questions. And clearly, I wasn’t starving

我和我的双胞胎哥哥一起长大,他是个富有爱心的好兄弟。要知道,作为双胞胎,你很快 就在一件事上成为专家,就是注意到偏爱。如果他的饼干比我的大 哪怕一点点,我就会质疑。当然我也没被饿着。

identical adj.相同的

slightly adv.轻微地

psychologist n心理学家


When I became a psychologist, I began to notice favoritism of a different kind; and that is, how much more we value the body than we do the mind. I spent nine years at university earning my favoritism doctorate in psychology, and I can’t tell you how many people look at my business card and say, “Oh - - a psychologist. So, not a real doctor,” as if it should say that on my card. This favoritism doctorate we show the body over the mind - - I see it everywhere.

当我成为一-个心理学家,我开始 注意到另一种不同的偏爱,那就是我们赋子我们的身体 比精神更多的价值。我花了九年时问 获得心理学博士学位,但不知道有多少人看了我的名片说,“哦,心理学家,原水不是真正的医生。”就好像我的名片上就该明确说明似的。这种对身体多于精神的偏爱随处可见。

psychologist n.心理学家

doctorate n.博士学位

favoritism n.偏袒


I recently was at a friend’s house, and their fivc-year-old was getting ready for bed. He was standing on a stool by the sink, brushing his teeth, when he slipped and scratched his leg on the stool when he fell. He cried for a minute, but then he got back up, got back on the stool, and reached out for a box of BandAids to put one on his cut.


Now, this kid could barely tie his shoelaces, but he knew you have to cover a cut so it doesn’t become infected, and you have to care for your teeth by brushing twice a day. We all know how to maintain our physical health and how to practice dental hygiene, right? We’ve known it since we were five years old. But what do we know about maintaining our psychological health? Well, nothing. What do we teach our children about emotional hygiene? Nothing. How is it that we spend more time taking care of our teeth than we do our minds? Why is it that our physical health is so much more important to us than our psychological health?

这孩子刚学会系鞋带儿,但他都知道要保护伤口以免感染,同时还要一天刷两次牙来保护牙齿。我们都知道怎样保特身体的健康 还有怎样保持牙齿卫生,对不对:我们从五岁起就知道这些东西了。但是我们知道怎样 保持精神上的健康吗?完全不知道。我们教给孩子们情绪保健吗?完全没有。为什么我们花在牙齿的时间 比花在精神的时间上还多呢? 为什么我们那么重视身体健康 远远多于心理健康呢?


We sustain psychological injuries even more often than we do physical ones, injuries like failure or rejection or loneliness. And they can also get worse if we ignore them, and they can impact our lives in dramatic ways. And yet, even though there are scientifically proven techniques we could use to treat these kinds of psychological injuries, we don’t. It doesn’t even occur to us that we should. “Oh, you’re feeling depressed? Just shake it off; it’s all in your head.” Can you imagine saying that to somebody with a broken leg: “Oh, just walk it off; it’s all in vour leg.”

我们承受心理上的伤害 比身体上的多得多,例如失败,被拒绝,孤独。如果我们忽视它们,情况也会恶化,它们同样会给我们的生活带米重大的影响。然而,虽然有科学证实的疗法 米帮助我们治疗 这些心理上的伤害,我们却不采取行动。我们甚至都没意识到 我们应该采取行动。“哦,你感到抑郁么? 别去想了,都在你脑袋甲。”你能想象对一个骨折了的人说这样的话吗?“哦、走走就好了,都在你腿上。


It is time we closed the gap between our physical and our psychological health. It’s time we made them more equal, more like twins.Speaking of which, my brother is aiso a psychologist. So he’s not a real doctor, either.

我们应该消除这种对身体和 精神健康的区别对待。应该把两者对等起水,像双胞胎一样。说起双胞胎,我哥哥也是个心理医生。所以他也不是真正的医生。


We didn’t study together, though. In fact, the hardest thing I’ve ever done in my life is move across the Atlantic to New York City to get my doctorate in psychology. We were apart then for the first time in our lives, and the separation was brutal for both of us. But while he remained among family and friends, I was alone in a new country. We missed each other terribly, but international phone calls were really expensive then, and we could only afford to speak for five minutes a week. When our birthday rolled around, it was the first we wouldn’t be spending together. We decided to splurge, and that week, we would talk for 10 minutes.

我们不是在一起上的学。事实上,我这辈子经历过的最困难的事就是跨过大西洋搬到红约 来读心理学的博士学位。那是我们俩第一次分隔两地,这个分离对我俩来说都很残酷。当他和家人朋友一起

吋,我却孤单的在—-个新的国度。我们都非常想念对方,但那吋候国际长途都很贵 我们一周只打的起五分钟的电话。当我们生日快到了的时候,那是我们第一个 没在一起过的生日。我们决定奢侈把,在那个星期聊上十分钟。


I spent the morning pacing around my room, waiting for him to call – and waiting.. and waiting. But the phone didn’t ring

我那天早上在房间里踱来踱去,等着我哥哥给我打过来 - 我等啊等啊,电话就是不响。


Given the time difference, I assumed, “OK, he’s out with friends. he’ll call later.” There were no cell phones then. But he didn’t. And I began to realize that after being away for over 10 months, he no longer missed me the way I missed him. I knew he would call in the morning, but that night was one of the saddest and longest nights of my life. I woke up the next morning. I glanced down at the phone, and I realized I had kicked it off the hook when pacing the day before. I stumbled out of bed, I put the phone back on the receiver, and it rang a second later. And it was my brother, and boy, was he pissed.

由于时差的关系,我就想,“好吧,他一定是和朋友在一起,他晚点 v绊倒儿会打水的。”那时候也没有手机。但他始终没打来。我开妤意识到,在我商开十个月以后,他不再像我想他那样想我了。我知道他早上会打米,但那一晚是我一生中 最份心,最漫长的一晚。第二天一早醒来,我职了一-眼电话,我意识到,来回跛步吋 我把电话线踹下水了我迷迷糊糊的跳下床,我刚把电话插回接口,一秒钟之后电话就响了。是我哥哥,他可气坏了。


It was the saddest and longest night of his life as well. Now, I tried to explain what happened, but he said, “I don’t understand. If you saw I wasn’t calling you, why didn’t you just pick up the phone and call me?” He was right. Why didn’t I call him? I didn’t have an answer then. But I do today, and it’s a simple one: loneliness.

那也是他一生中 最伤心漫长的一夜。当我跟他解释事情的经过,他说,“我不明白。你看我没给你打,你为什么不打给我呢?”他说的对。我为什么不打给他呢?我当时无法解释,但我现在明白了,非常简单的原因:孤独。


Loneliness creates a deep psychological wound, one that distorts our perceptions and scrambies our thinking. It makes us believe that those around us care much less than they actuaily do. It make us really afraid to reach out, because why set yourself up for reiection and heartache when your heart is already aching more than you can stand? I was in the grips of real loneliness back then, but I was surrounded by people all day, so it never occurred to me. But loneliness is defined purely subjectively. It depends solely on whether you feel emotionally or socially disconnected from those around you. And I did.

孤独导致深重的心理创伤,扭曲我们的感知能力,剥夺我们的思考能力。它使我们相信 身边的人不再在乎我们。 它使我们不取与人联络,为什么给自取其辱被拒绝呢? 你的心痛的还不够多么?我那个时候被孤独紧紧包裹着,但我总和别人在一起,我自己都没意识到。但孤独是完全从主观上定义的。它完全取决于你是否觉得 在情绪上或是交际上 和你周围的人相隔绝。我当时是这样的。


There is a lot of research on loneliness, and all of it is horrifying.

Loneliness won’t just make you miserable; it will kill you. I’m

not kidding. Chronic loneliness increases your likelihood of an early death by 14 percent. Fourteen percent! Loneliness causes high blood pressure, high cholesterol. It even suppress the functioning of your immune system, making you vulnerable to

cholesterol

n胆固醇

all kinds of illnesses and diseases. In fact. scientists have concluded that taken together, chronic loneliness poses as significant a risk for your long-term health and longevity as

vulnerable

adi.脆弱的

cigarette smoking.

我们有很多关于孤独的研究, 都很可怕。孤独不仅让你觉得凄惨,它还可能致死。我可不是开玩笑。长期的抓独 会增加你早逝的可能性 高达14%之多。孤独可能导致 高血乐,高胆固醇。它甚至会影响你的免疫系统,使你容易患上各种疾病。事实上,科学家已经得出结论,长期的孤独对你的健康和长寿的负面影响比抽烟还要糟。

文章作者: gglss
文章链接: http://example.com/posts/1672051471.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/16766.html b/posts/16766.html index 7b00e0838..b5658878d 100644 --- a/posts/16766.html +++ b/posts/16766.html @@ -1 +1 @@ -docker 帮助启动类命令(一) | GGLSS

docker 帮助启动类命令(一)

docker 帮助启动类命令(一)

启动docker

systemctl start docker

停止docker

systemctl stop docker

查看docker状态

systemctl status docker

重启 docker,没有任何提示说明启动成功

systemctl restart docker

文章作者: gglss
文章链接: http://example.com/posts/16766.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +docker 帮助启动类命令(一) | GGLSS

docker 帮助启动类命令(一)

docker 帮助启动类命令(一)

启动docker

systemctl start docker

停止docker

systemctl stop docker

查看docker状态

systemctl status docker

重启 docker,没有任何提示说明启动成功

systemctl restart docker

文章作者: gglss
文章链接: http://example.com/posts/16766.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/16785.html b/posts/16785.html index f8318bf28..5d35a2933 100644 --- a/posts/16785.html +++ b/posts/16785.html @@ -1 +1 @@ -开发获取用户列表的Post接口 | GGLSS

开发获取用户列表的Post接口

开发获取用户列表的post请求

开发添加人员信息时需要的字段数据

首先,写一个User类,这将是添加时的字段数据

1
2
3
4
5
6
7
8
@Data
public class User {
private String userName;
private String password;
private String name;
private String age;
private String sex;
}

然后开始写怎么获取用户列表,相当于添加用户

@RequestBody User u请求post接口时,在Body填写上传的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RequestMapping(value = "/getUserList", method = RequestMethod.POST)
@ApiOperation(value = "获取用户列表", httpMethod = "POST")
public String getUserList(HttpServletRequest request,
@RequestBody User u){
User user;
// 获取cookies
Cookie[] cookies= request.getCookies();
// 验证cookies是否合法
for(Cookie c:cookies){
if (c.getName().equals("login")
&& c.getValue().equals("true")
&& u.getUserName().equals("zhangsan")
&& u.getPassword().equals("123456")){
user = new User();
user.setName("lisi");
user.setAge("18");
user.setSex("man");
return user.toString();
}
}
return "参数不合法";
}
文章作者: gglss
文章链接: http://example.com/posts/16785.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +开发获取用户列表的Post接口 | GGLSS

开发获取用户列表的Post接口

开发获取用户列表的post请求

开发添加人员信息时需要的字段数据

首先,写一个User类,这将是添加时的字段数据

1
2
3
4
5
6
7
8
@Data
public class User {
private String userName;
private String password;
private String name;
private String age;
private String sex;
}

然后开始写怎么获取用户列表,相当于添加用户

@RequestBody User u请求post接口时,在Body填写上传的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RequestMapping(value = "/getUserList", method = RequestMethod.POST)
@ApiOperation(value = "获取用户列表", httpMethod = "POST")
public String getUserList(HttpServletRequest request,
@RequestBody User u){
User user;
// 获取cookies
Cookie[] cookies= request.getCookies();
// 验证cookies是否合法
for(Cookie c:cookies){
if (c.getName().equals("login")
&& c.getValue().equals("true")
&& u.getUserName().equals("zhangsan")
&& u.getPassword().equals("123456")){
user = new User();
user.setName("lisi");
user.setAge("18");
user.setSex("man");
return user.toString();
}
}
return "参数不合法";
}
文章作者: gglss
文章链接: http://example.com/posts/16785.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/1817691161.html b/posts/1817691161.html index cdd5407b2..9d023ff85 100644 --- a/posts/1817691161.html +++ b/posts/1817691161.html @@ -1 +1 @@ -使用moko编写测试接口 | GGLSS

使用moko编写测试接口

编写规则

  • []包裹着以{}包起来的接口脚本

  • description:接口简介

  • request:使用{}包含接口的请求信息

    • uri:接口的地址名称
    • method:请求方法
    • queries:get请求参数
    • forms:post请求参数
    • headers:请求头信息
  • response:返回的数据,使用{}

    • text:返回的文字数据
    • cookies:返回的cookie信息
    • status:返回的响应码

举个栗子demo

1
2
3
4
5
6
7
8
9
10
11
[
{
"description": "这是我们的第一个mock栗子",
"request": {
"uri": "/demo"
},
"response": {
"text": "第一个mock响应demo"
}
}
]

get请求demo

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"description": "接口的get请求",
"request": {
"uri": "/#/test/xml",
"method": "get"
},
"response": {
"text": "get请求接口"
}
}
]

使用moko编写Get和Post测试接口

上一节已经写了规则,这次直接来编写Get和Post请求

模拟一个没有参数的get请求

1
2
3
4
5
6
7
8
9
10
{
"description": "模拟一个没有参数的get请求",
"request": {
"uri": "/getdemo",
"method": "get"
},
"response": {
"text": "这是一个没有参数的get请求"
}
}

模拟一个带参数的请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"description": "模拟一个带参数的请求",
"request": {
"uri": "getwithparam",
"method": "get",
"queries": {
"name": "胡汉三",
"age": "18"
}
},
"response": {
"text": "我胡汉三又回来了!!!!!"
}
}

模拟一个Post请求

1
2
3
4
5
6
7
8
9
10
{
"description": "模拟一个Post请求",
"request": {
"uri": "/postdemo",
"method": "post"
},
"response": {
"text": "这是我的第一个mosk的post请求"
}
}

这是一个带参数的post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"description": "这是一个带参数的post请求",
"request": {
"uri": "/postwithparam",
"method": "post",
"forms": {
"name": "胡汉三",
"sex": "男人"
}
},
"response": {
"text": "我胡汉三带着参数来了!!!!"
}
}

使用moko编写包含cookie信息的测试接口

这是一个会返回cookie的get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"description": "这是一个会返回cookie的get请求",
"request": {
"uri": "/getCookies",
"method": "get"
},
"response": {
"cookies": {
"login": "true"
},
"text": "恭喜你获得cookies信息成功",
"status": 200,
"msg": "成功"
}
}

这是一个携带cookies信息的get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"description": "这是一个带cookies信息的get请求",
"request": {
"uri": "/get/with/cookies",
"method": "get",
"cookies": {
"login": "true"
}
},
"response": {
"text": "这是一个需要携带cookies信息才能访问的get请求"
}
}

这是一个携带cookies信息的post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"description": "这是一个带cookies信息的post请求",
"request": {
"uri": "/post/with/cookies",
"method": "post",
"cookies": {
"login": "true"
},
"json": {
"name": "huhansan",
"age": "18"
}
},
"response": {
"status": 200,
"json": {
"huhansan": "success",
"status": "1"
}
}
}

重定向的测试接口

  • 使用了redirectTo:目标地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[
{
"description": "重定向到百度",
"request": {
"uri": "/redirect"
},
"redirectTo": "http://www.baidu.com"
},
{
"description": "重定向到自己的网页上",
"request": {
"uri": "/redirect/topath"
},
"redirectTo": "/redirect/new"
},
{
"description": "这是被重定到的请求",
"request": {
"uri": "/redirect/new"
},
"response": {
"text": "重定向成功了"
}
}
]

下载jar包

点击moke选择版本进行下载,我下载的的是moco-runner-0.11.0-standalone.jar

使用命令启动测试脚本

1
java -jar jar包的存放路径 http -p 端口 -c json文件路径
文章作者: gglss
文章链接: http://example.com/posts/1817691161.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用moko编写测试接口 | GGLSS

使用moko编写测试接口

编写规则

  • []包裹着以{}包起来的接口脚本

  • description:接口简介

  • request:使用{}包含接口的请求信息

    • uri:接口的地址名称
    • method:请求方法
    • queries:get请求参数
    • forms:post请求参数
    • headers:请求头信息
  • response:返回的数据,使用{}

    • text:返回的文字数据
    • cookies:返回的cookie信息
    • status:返回的响应码

举个栗子demo

1
2
3
4
5
6
7
8
9
10
11
[
{
"description": "这是我们的第一个mock栗子",
"request": {
"uri": "/demo"
},
"response": {
"text": "第一个mock响应demo"
}
}
]

get请求demo

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"description": "接口的get请求",
"request": {
"uri": "/#/test/xml",
"method": "get"
},
"response": {
"text": "get请求接口"
}
}
]

使用moko编写Get和Post测试接口

上一节已经写了规则,这次直接来编写Get和Post请求

模拟一个没有参数的get请求

1
2
3
4
5
6
7
8
9
10
{
"description": "模拟一个没有参数的get请求",
"request": {
"uri": "/getdemo",
"method": "get"
},
"response": {
"text": "这是一个没有参数的get请求"
}
}

模拟一个带参数的请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"description": "模拟一个带参数的请求",
"request": {
"uri": "getwithparam",
"method": "get",
"queries": {
"name": "胡汉三",
"age": "18"
}
},
"response": {
"text": "我胡汉三又回来了!!!!!"
}
}

模拟一个Post请求

1
2
3
4
5
6
7
8
9
10
{
"description": "模拟一个Post请求",
"request": {
"uri": "/postdemo",
"method": "post"
},
"response": {
"text": "这是我的第一个mosk的post请求"
}
}

这是一个带参数的post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"description": "这是一个带参数的post请求",
"request": {
"uri": "/postwithparam",
"method": "post",
"forms": {
"name": "胡汉三",
"sex": "男人"
}
},
"response": {
"text": "我胡汉三带着参数来了!!!!"
}
}

使用moko编写包含cookie信息的测试接口

这是一个会返回cookie的get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"description": "这是一个会返回cookie的get请求",
"request": {
"uri": "/getCookies",
"method": "get"
},
"response": {
"cookies": {
"login": "true"
},
"text": "恭喜你获得cookies信息成功",
"status": 200,
"msg": "成功"
}
}

这是一个携带cookies信息的get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"description": "这是一个带cookies信息的get请求",
"request": {
"uri": "/get/with/cookies",
"method": "get",
"cookies": {
"login": "true"
}
},
"response": {
"text": "这是一个需要携带cookies信息才能访问的get请求"
}
}

这是一个携带cookies信息的post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"description": "这是一个带cookies信息的post请求",
"request": {
"uri": "/post/with/cookies",
"method": "post",
"cookies": {
"login": "true"
},
"json": {
"name": "huhansan",
"age": "18"
}
},
"response": {
"status": 200,
"json": {
"huhansan": "success",
"status": "1"
}
}
}

重定向的测试接口

  • 使用了redirectTo:目标地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[
{
"description": "重定向到百度",
"request": {
"uri": "/redirect"
},
"redirectTo": "http://www.baidu.com"
},
{
"description": "重定向到自己的网页上",
"request": {
"uri": "/redirect/topath"
},
"redirectTo": "/redirect/new"
},
{
"description": "这是被重定到的请求",
"request": {
"uri": "/redirect/new"
},
"response": {
"text": "重定向成功了"
}
}
]

下载jar包

点击moke选择版本进行下载,我下载的的是moco-runner-0.11.0-standalone.jar

使用命令启动测试脚本

1
java -jar jar包的存放路径 http -p 端口 -c json文件路径
文章作者: gglss
文章链接: http://example.com/posts/1817691161.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/18767.html b/posts/18767.html index 516eaec21..3bbebf37d 100644 --- a/posts/18767.html +++ b/posts/18767.html @@ -1,4 +1,4 @@ -docker 镜像(二) | GGLSS

docker 镜像(二)

镜像(二)

查看 镜像/容器/数据 卷所占的空间

docker system df

1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 6 3 1.173GB 921.1MB (78%)
Containers 6 0 4.517MB 4.517MB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

删除镜像

docker rmi 镜像ID

#### 如果提示报错
+docker 镜像(二) | GGLSS

docker 镜像(二)

镜像(二)

查看 镜像/容器/数据 卷所占的空间

docker system df

1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 6 3 1.173GB 921.1MB (78%)
Containers 6 0 4.517MB 4.517MB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

删除镜像

docker rmi 镜像ID

#### 如果提示报错
 Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is being used by stopped container 13111f725991
 
 说明之前运行过这个镜像,生成了容器,需要先删除容器,再删除镜像
@@ -11,4 +11,4 @@
 
 #### 使用 -f 删除全部
 > docker rmi -f $(docker images -qa)
-
文章作者: gglss
文章链接: http://example.com/posts/18767.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
🍭查看新品🍬
\ No newline at end of file +
文章作者: gglss
文章链接: http://example.com/posts/18767.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/20480.html b/posts/20480.html index 48086d9a2..6d1968d7a 100644 --- a/posts/20480.html +++ b/posts/20480.html @@ -1 +1 @@ -使用Postman如何做接口测试 | GGLSS

使用Postman如何做接口测试

Postman安装

Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

不带参数的请求:
image
发送需要认证的get接口:
image

------------恢复内容开始------------

## Postman安装 > Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

1、postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

get请求

不带参数的请求:
image
发送需要认证的get接口:
image

post请求

选择请求格式为post
传参:

  • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
  • Body中Form-data:以表单的方式进行数据编辑
  • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
  • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.

Pre-request Scrip

image

Tests

image

postman保存测试用例

image

postman批量运行

image
image

选择文件进行参数化

json文件

image

txt文件

image
使用参数时,变量名称要与文件里的变量名保持一致

postman环境管理

image
image
引用环境信息:

postman全局变量

image
也可以用javascript写变量:
image
引用全局变量信息:
image
image
Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
image

关联

------------恢复内容结束------------

------------恢复内容开始------------

## Postman安装 > Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

1、postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

get请求

不带参数的请求:
image
发送需要认证的get接口:
image

post请求

选择请求格式为post
传参:

  • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
  • Body中Form-data:以表单的方式进行数据编辑
  • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
  • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.

Pre-request Scrip

image

Tests

image

postman保存测试用例

image

postman批量运行

image
image

选择文件进行参数化

json文件

image

txt文件

image
使用参数时,变量名称要与文件里的变量名保持一致

postman环境管理

image
image
引用环境信息:

postman全局变量

image
也可以用javascript写变量:
image
引用全局变量信息:
image
image
Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
image

关联

断言

Postman通过tests插入断言
image

关联

把上一个接口的返回数据作为下一个参数的输入参数使用

  • 先发送一个接口,查看返回值
  • 在上一个接口的tests里面添加js脚本
    • 获取上一个接口返回值并赋值给变量
    • 定义全局变量,并获取要作为下一个接口输入的数据字段
  • 引用全局变量

生成并导出接口脚本

导出接口测试脚本

image

导出测试集

image
image

导入测试集

image

文章作者: gglss
文章链接: http://example.com/posts/20480.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用Postman如何做接口测试 | GGLSS

使用Postman如何做接口测试

Postman安装

Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

不带参数的请求:
image
发送需要认证的get接口:
image

------------恢复内容开始------------

## Postman安装 > Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

1、postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

get请求

不带参数的请求:
image
发送需要认证的get接口:
image

post请求

选择请求格式为post
传参:

  • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
  • Body中Form-data:以表单的方式进行数据编辑
  • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
  • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.

Pre-request Scrip

image

Tests

image

postman保存测试用例

image

postman批量运行

image
image

选择文件进行参数化

json文件

image

txt文件

image
使用参数时,变量名称要与文件里的变量名保持一致

postman环境管理

image
image
引用环境信息:

postman全局变量

image
也可以用javascript写变量:
image
引用全局变量信息:
image
image
Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
image

关联

------------恢复内容结束------------

------------恢复内容开始------------

## Postman安装 > Postman下载:https://www.postman.com/downloads/

image
下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

postman主要功能说明

1、postman主要模块功能介绍

image
点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
image
image
image
image
创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
image
image

发送http请求和分析响应数据

在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
请求的方法:get或post
请求的URL:协议+域名/IP+端口+资源路径

get请求

不带参数的请求:
image
发送需要认证的get接口:
image

post请求

选择请求格式为post
传参:

  • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
  • Body中Form-data:以表单的方式进行数据编辑
  • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
  • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.

Pre-request Scrip

image

Tests

image

postman保存测试用例

image

postman批量运行

image
image

选择文件进行参数化

json文件

image

txt文件

image
使用参数时,变量名称要与文件里的变量名保持一致

postman环境管理

image
image
引用环境信息:

postman全局变量

image
也可以用javascript写变量:
image
引用全局变量信息:
image
image
Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
image

关联

断言

Postman通过tests插入断言
image

关联

把上一个接口的返回数据作为下一个参数的输入参数使用

  • 先发送一个接口,查看返回值
  • 在上一个接口的tests里面添加js脚本
    • 获取上一个接口返回值并赋值给变量
    • 定义全局变量,并获取要作为下一个接口输入的数据字段
  • 引用全局变量

生成并导出接口脚本

导出接口测试脚本

image

导出测试集

image
image

导入测试集

image

文章作者: gglss
文章链接: http://example.com/posts/20480.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/2166.html b/posts/2166.html index 05e696725..7be47312e 100644 --- a/posts/2166.html +++ b/posts/2166.html @@ -1 +1 @@ -硬件性能监控平台 | GGLSS

硬件性能监控平台

拉取prometheus镜像

1
docker pull prom/prometheus

创建prometheus容器并启动

1
docker run -itd --name=docker_prometheus --restart=always -p 3090:9090 -v /opt/prometheus:/ prom/prometheus

验证

通过浏览器访问http://ip:3090进行访问

方法一:服务器上直接安装node_export

首先,用浏览器访问:node_export 下载,然后上传到被监控的服务器并解压
进入解压文件夹,直接启动./node_exporter

方法二:拉取docker node_export镜像

1
docker pull prom/node-exporter

创建node_export容器并启动

1
2
3
4
5
6
7
docker run -itd --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter

验证

在浏览器访问http://ip:9100/metrics进行访问

配置prometheus + node_export

node_export的作用收集硬件数据

使用vim修改yum文件容器内:/etc/prometheus/prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus

- job_name: linux
static_configs:
- targets: ['被监控的服务器ip:9100']
labels:
instance: localhost

重启prometheus容器

1
docker restart docker_prometheus

配置Grafana

使用Grafana下载版本

配置数据源

  • 数据源:选择prometheus

  • URL输入http://prometheus机器ip:3090

  • 点击Save & Test保存

添加仪表盘

使用官方仪表盘进行下载仪表盘
导入仪表盘
import via grafana.com输入框输入模板ID12884

ID:12633也可以使用。

点击 load,然后底部选择刚弄的数据源,点击import

注意:
点击json下载12884的json文件

文章作者: gglss
文章链接: http://example.com/posts/2166.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +硬件性能监控平台 | GGLSS

硬件性能监控平台

拉取prometheus镜像

1
docker pull prom/prometheus

创建prometheus容器并启动

1
docker run -itd --name=docker_prometheus --restart=always -p 3090:9090 -v /opt/prometheus:/ prom/prometheus

验证

通过浏览器访问http://ip:3090进行访问

方法一:服务器上直接安装node_export

首先,用浏览器访问:node_export 下载,然后上传到被监控的服务器并解压
进入解压文件夹,直接启动./node_exporter

方法二:拉取docker node_export镜像

1
docker pull prom/node-exporter

创建node_export容器并启动

1
2
3
4
5
6
7
docker run -itd --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter

验证

在浏览器访问http://ip:9100/metrics进行访问

配置prometheus + node_export

node_export的作用收集硬件数据

使用vim修改yum文件容器内:/etc/prometheus/prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus

- job_name: linux
static_configs:
- targets: ['被监控的服务器ip:9100']
labels:
instance: localhost

重启prometheus容器

1
docker restart docker_prometheus

配置Grafana

使用Grafana下载版本

配置数据源

  • 数据源:选择prometheus

  • URL输入http://prometheus机器ip:3090

  • 点击Save & Test保存

添加仪表盘

使用官方仪表盘进行下载仪表盘
导入仪表盘
import via grafana.com输入框输入模板ID12884

ID:12633也可以使用。

点击 load,然后底部选择刚弄的数据源,点击import

注意:
点击json下载12884的json文件

文章作者: gglss
文章链接: http://example.com/posts/2166.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/22551.html b/posts/22551.html index ab9d73987..d796a8154 100644 --- a/posts/22551.html +++ b/posts/22551.html @@ -1 +1 @@ -Groovy编写方法 | GGLSS

Groovy编写方法

关键字:

  • **log**:写入信息到jmeterlog文件,使用方法:log.info(*Thisisloginfo
  • **ctx**:该变量引用了当前线程的上下文,使用方法可参考:org.apache.imeter.threads.JMeterContext。
  • vars-(JMeterVariables):操作imeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,
    常用方法:
    • a)vars.get(Stringkey):从imeter中获得变量值
    • b)vars.put(Stringkey,Stringvalue):数据存到imeter变量中
      更多方法可参考:org.apache.imeter.threads.JMeterVariables
  • props-(JMeterProperties-classjava.util.Properties):操作imeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
    对应于iava.util.Properties。
    • a)props.get(“START.HMS”); 注:START.HMS为属性名,在文件imeter.properties中定义
    • b)props.put(“PROP1”,”1234”);

  • prey-(SampleResult):获取前面的sample返回的信息,
    常用方法:
    • a)getResponseDataAsString():获取响应信息
    • b)getResponseCode():获取响应code
      更多方法可参考:org.apache.imeter.samplers.SampleResult
  • sampler-(Sampler):gives access to the current sampler
文章作者: gglss
文章链接: http://example.com/posts/22551.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Groovy编写方法 | GGLSS

Groovy编写方法

关键字:

  • **log**:写入信息到jmeterlog文件,使用方法:log.info(*Thisisloginfo
  • **ctx**:该变量引用了当前线程的上下文,使用方法可参考:org.apache.imeter.threads.JMeterContext。
  • vars-(JMeterVariables):操作imeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,
    常用方法:
    • a)vars.get(Stringkey):从imeter中获得变量值
    • b)vars.put(Stringkey,Stringvalue):数据存到imeter变量中
      更多方法可参考:org.apache.imeter.threads.JMeterVariables
  • props-(JMeterProperties-classjava.util.Properties):操作imeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
    对应于iava.util.Properties。
    • a)props.get(“START.HMS”); 注:START.HMS为属性名,在文件imeter.properties中定义
    • b)props.put(“PROP1”,”1234”);

  • prey-(SampleResult):获取前面的sample返回的信息,
    常用方法:
    • a)getResponseDataAsString():获取响应信息
    • b)getResponseCode():获取响应code
      更多方法可参考:org.apache.imeter.samplers.SampleResult
  • sampler-(Sampler):gives access to the current sampler
文章作者: gglss
文章链接: http://example.com/posts/22551.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/23767.html b/posts/23767.html index 7e89f0bda..08436fa9c 100644 --- a/posts/23767.html +++ b/posts/23767.html @@ -11,4 +11,4 @@ # 进入容器 docker exec -it centos7-influx bash -

端口说明:

安装Influxdb

  1. 下载influxDB

新版本可以点击influxDB官网进行下载

# 下载安装包 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm # 安装运行 yum localinstall influxdb-1.6.3.x86_64.rpm
  1. influxDB配置

安装运行后,然后对influxDB进行配置,主要是配置Jmeter连接的数据库和端口号

vim /etc/influxdb/influxdb.conf

找到graphite并且修改它的库与端口

1
2
3
4
5
6
enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one"
  1. 找到[http],将前面的#号去掉
  1. 配置成功,启动influxDB

安装Grafana

新版本下载位置:Grafana官网下载:https://grafana.com/grafana/download

1
2
3
wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm

sudo yum localinstall grafana-6.5.2-1.x86_64.rpm

然后启动

启动命令: systemctl start grafana-server.service

查看状态命令: systemctl status grafana-server.service

然后在浏览器访问登录http://ip:3000

配置Jmeter

一、添加监听器:Backend Listener

二、配置监听器:Backend Listener

Backend Listener implementation 默认选择GraphiteBackendListenerClient

三:运行Jmeter脚本,查看数据库

数据库里面有两个库,jmeter库就是jmeter运行生成表的数据库

可以看到生成了三类前缀的表,分别是: jmeter.all 、 jmeter.[请求名称];最后还有 jmeter.test 开头的表,这个后面会单独拿出来说

前缀的含义

Thread/Virtual Users metrics - 线程/虚拟用户指标
跟线程组设置相关的

指标全称含义
jmeter.test.minATMin active threads最小活跃线程数
jmeter.test.maxATMax active threads最大活跃线程数
jmeter.test.meanATMean active threads平均活跃线程数
jmeter.test.startedTStarted threads启动线程数
jmeter.test.endedTFinished threads结束线程数

Response times metrics - 响应时间指标

划重点:每个sampler(请求)都包含了所有响应时间指标,每个sampler(请求)的每个指标都会有单独的一个表存储结果数据

指标含义
.ok.countsampler的成功响应数
.h.count服务器每秒命中次数(每秒点击数,即TPS)
.ok.minsampler响应成功的最短响应时间
.ok.maxsampler响应成功的最长响应时间
.ok.avgsampler响应成功的平均响应时间
.ok.pctsampler响应成功的所占百分比
.ko.countsampler的失败响应数
.ko.minsampler响应失败的最短响应时间
.ko.maxsampler响应失败的最长响应时间
.ko.avgsampler响应失败的平均响应时间
.ko.pctsampler响应失败的所占百分比
.a.countsampler响应数(ok.count+ko.count)
.sb.bytes已发送字节
.rb.bytes已接收字节
.a.minsampler响应的最短响应时间(ok.count和ko.count的最小值)
.a.maxsampler响应的最长响应时间(ok.count和ko.count的最大值)
.a.avgsampler响应的平均响应时间(ok.count和ko.count的平均值)
.a.pctsampler响应的百分比(根据成功和失败的总数来计算)

四、配置Grafana

步骤:

配置数据源

点击首页的Create your first data source,然后进行配置

点击选择influxDB

配置数据面板

选择Add Query,然后进行配置

当我们只想看数据而不想看数据趋势图的话,可以改变它的类型;

在同一个界面,点击左侧列表选中第二个icon,然后选择Singlestat即可

基本的配置完成,Jmeter使用GraphiteBackendListenerClient来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加;后面将会介绍如何通过InfluxDBBackendListenerClient来采集数据

给Jmeter的Backend Listener配置为InfluxDBBackendListenerClient

首先来看看每个配置项的含义

  1. influxdbUrl:安装influxdb的路径;主要格式:http://主机地址:8086/write?db=数据库名
  2. application:应用名称;在 events 表中对应的字段是 application
  3. measurement:表名;数据存储到哪个表,默认是jmeter,不用改即可
  4. summaryOnly:同GraphiteBackendListenerClient
  5. samplersRegex:同GraphiteBackendListenerClient
  6. percentiles:同GraphiteBackendListenerClient
  7. testTitle:测试名称;在 events 表中对应的字段是 text ,JMeter在测试的开始和结束时自动生成注释,该注释的值以’start’和’end’结尾
  8. eventTags:Grafana允许为每个注释显示标签;在 events 表中对应的字段是 tags

inDB数据库
使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表:

events :主要拿存事件的

jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示

配置数据面板

首先,进入官方模板库: https://grafana.com/dashboards ,然后跟着图片导入模板并初始化即可

然后jmeter再次执行一下测试计划

模板自带了三个下拉筛选框

  1. data_source:数据源,在Grafana配置了多少个就显示多少个

  2. application:在Jmeter配置好的application,如果每次测试计划执行时的application都不一样,你就可以通过这个筛选出对应测试时机的结果数据了

  3. transaction:在Jmeter配置好的sampleList,譬如我只发了get、post请求,这里就只会给你选get、post;可以滑到页面下面看到针对某个请求的数据展示

卸载Grafana

停止Grafana服务。

1
systemctl stop grafana-server.service
1
systemctl disable grafana-server.service

查看要卸载的包的名称

1
yum list installed

输入命令行卸载Grafana

1
yum remove grafana.x86_64
文章作者: gglss
文章链接: http://example.com/posts/23767.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
avatar
gglss
Follow Me
公告
好好学习,天天向上
最新文章
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +

端口说明:

安装Influxdb

  1. 下载influxDB

新版本可以点击influxDB官网进行下载

# 下载安装包 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm # 安装运行 yum localinstall influxdb-1.6.3.x86_64.rpm
  1. influxDB配置

安装运行后,然后对influxDB进行配置,主要是配置Jmeter连接的数据库和端口号

vim /etc/influxdb/influxdb.conf

找到graphite并且修改它的库与端口

1
2
3
4
5
6
enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one"
  1. 找到[http],将前面的#号去掉
  1. 配置成功,启动influxDB

安装Grafana

新版本下载位置:Grafana官网下载:https://grafana.com/grafana/download

1
2
3
wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm

sudo yum localinstall grafana-6.5.2-1.x86_64.rpm

然后启动

启动命令: systemctl start grafana-server.service

查看状态命令: systemctl status grafana-server.service

然后在浏览器访问登录http://ip:3000

配置Jmeter

一、添加监听器:Backend Listener

二、配置监听器:Backend Listener

Backend Listener implementation 默认选择GraphiteBackendListenerClient

三:运行Jmeter脚本,查看数据库

数据库里面有两个库,jmeter库就是jmeter运行生成表的数据库

可以看到生成了三类前缀的表,分别是: jmeter.all 、 jmeter.[请求名称];最后还有 jmeter.test 开头的表,这个后面会单独拿出来说

前缀的含义

Thread/Virtual Users metrics - 线程/虚拟用户指标
跟线程组设置相关的

指标全称含义
jmeter.test.minATMin active threads最小活跃线程数
jmeter.test.maxATMax active threads最大活跃线程数
jmeter.test.meanATMean active threads平均活跃线程数
jmeter.test.startedTStarted threads启动线程数
jmeter.test.endedTFinished threads结束线程数

Response times metrics - 响应时间指标

划重点:每个sampler(请求)都包含了所有响应时间指标,每个sampler(请求)的每个指标都会有单独的一个表存储结果数据

指标含义
.ok.countsampler的成功响应数
.h.count服务器每秒命中次数(每秒点击数,即TPS)
.ok.minsampler响应成功的最短响应时间
.ok.maxsampler响应成功的最长响应时间
.ok.avgsampler响应成功的平均响应时间
.ok.pctsampler响应成功的所占百分比
.ko.countsampler的失败响应数
.ko.minsampler响应失败的最短响应时间
.ko.maxsampler响应失败的最长响应时间
.ko.avgsampler响应失败的平均响应时间
.ko.pctsampler响应失败的所占百分比
.a.countsampler响应数(ok.count+ko.count)
.sb.bytes已发送字节
.rb.bytes已接收字节
.a.minsampler响应的最短响应时间(ok.count和ko.count的最小值)
.a.maxsampler响应的最长响应时间(ok.count和ko.count的最大值)
.a.avgsampler响应的平均响应时间(ok.count和ko.count的平均值)
.a.pctsampler响应的百分比(根据成功和失败的总数来计算)

四、配置Grafana

步骤:

配置数据源

点击首页的Create your first data source,然后进行配置

点击选择influxDB

配置数据面板

选择Add Query,然后进行配置

当我们只想看数据而不想看数据趋势图的话,可以改变它的类型;

在同一个界面,点击左侧列表选中第二个icon,然后选择Singlestat即可

基本的配置完成,Jmeter使用GraphiteBackendListenerClient来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加;后面将会介绍如何通过InfluxDBBackendListenerClient来采集数据

给Jmeter的Backend Listener配置为InfluxDBBackendListenerClient

首先来看看每个配置项的含义

  1. influxdbUrl:安装influxdb的路径;主要格式:http://主机地址:8086/write?db=数据库名
  2. application:应用名称;在 events 表中对应的字段是 application
  3. measurement:表名;数据存储到哪个表,默认是jmeter,不用改即可
  4. summaryOnly:同GraphiteBackendListenerClient
  5. samplersRegex:同GraphiteBackendListenerClient
  6. percentiles:同GraphiteBackendListenerClient
  7. testTitle:测试名称;在 events 表中对应的字段是 text ,JMeter在测试的开始和结束时自动生成注释,该注释的值以’start’和’end’结尾
  8. eventTags:Grafana允许为每个注释显示标签;在 events 表中对应的字段是 tags

inDB数据库
使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表:

events :主要拿存事件的

jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示

配置数据面板

首先,进入官方模板库: https://grafana.com/dashboards ,然后跟着图片导入模板并初始化即可

然后jmeter再次执行一下测试计划

模板自带了三个下拉筛选框

  1. data_source:数据源,在Grafana配置了多少个就显示多少个

  2. application:在Jmeter配置好的application,如果每次测试计划执行时的application都不一样,你就可以通过这个筛选出对应测试时机的结果数据了

  3. transaction:在Jmeter配置好的sampleList,譬如我只发了get、post请求,这里就只会给你选get、post;可以滑到页面下面看到针对某个请求的数据展示

卸载Grafana

停止Grafana服务。

1
systemctl stop grafana-server.service
1
systemctl disable grafana-server.service

查看要卸载的包的名称

1
yum list installed

输入命令行卸载Grafana

1
yum remove grafana.x86_64
文章作者: gglss
文章链接: http://example.com/posts/23767.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
avatar
gglss
Follow Me
公告
好好学习,天天向上
最新文章
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/24951.html b/posts/24951.html index 96f35ee64..8dc589525 100644 --- a/posts/24951.html +++ b/posts/24951.html @@ -1 +1 @@ -返回cookie的Get接口开发 | GGLSS

返回cookie的Get接口开发

位置布局

1
2
3
4
5
6
7
- java
- com.course.server
- intertype
MyGetMethod
Application
- resources
- application.properties

Application 类

创建Application.java类,用来运行接口,类名只能是Application,不能自定义

1
2
3
4
5
6
7
8
@SpringBootApplication
@Controller("com.course.server.intertype")
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
  • @SpringBootApplication 作用是给当前类标明是运行的主类,相当于被SpringBoot托管了
  • @Controller("com.course.server.intertype") 钩子标识符,扫描包下面的类,被Springboot托管

编写Get接口

创建MyGetMethod

类名上有修饰符@RestController@Api(value = "/")

  • @RestController 标识该类会被扫描到,然后被SpringBoot托管
  • @Api(value = "/") 可加可不加
  • @RequestMapping(value = "访问路径", method = 访问方法) 定义接口的访问路径及访问方法
  • @ApiOperation(value = "接口信息", httpMethod = "接口的请求方法") 展示接口的基本信息和它的请求方法,可加可不加

下面是代码信息,之后的所有GET接口都在该类里面写接口方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@RestController
@Api(value = "/", tags = {SwaggerConfig.TagGet} )
public class MyGetMethod {

@RequestMapping(value = "/getCookies", method = RequestMethod.GET)
@ApiOperation(value = "通过这个方法可以获得cookies", httpMethod = "GET")
public String getCookies(HttpServletResponse response){

// HttpServerletRequest 装请求信息类
// HttpServerletResponse 装响应信息类

Cookie cookie = new Cookie("login", "True");

response.addCookie(cookie);

return "恭喜获得cookies信息成功";
}
}

上面就是返回cookie的get接口开发,接下来就是 需要携带cookies信息才能访问的get请求

文章作者: gglss
文章链接: http://example.com/posts/24951.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +返回cookie的Get接口开发 | GGLSS

返回cookie的Get接口开发

位置布局

1
2
3
4
5
6
7
- java
- com.course.server
- intertype
MyGetMethod
Application
- resources
- application.properties

Application 类

创建Application.java类,用来运行接口,类名只能是Application,不能自定义

1
2
3
4
5
6
7
8
@SpringBootApplication
@Controller("com.course.server.intertype")
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
  • @SpringBootApplication 作用是给当前类标明是运行的主类,相当于被SpringBoot托管了
  • @Controller("com.course.server.intertype") 钩子标识符,扫描包下面的类,被Springboot托管

编写Get接口

创建MyGetMethod

类名上有修饰符@RestController@Api(value = "/")

  • @RestController 标识该类会被扫描到,然后被SpringBoot托管
  • @Api(value = "/") 可加可不加
  • @RequestMapping(value = "访问路径", method = 访问方法) 定义接口的访问路径及访问方法
  • @ApiOperation(value = "接口信息", httpMethod = "接口的请求方法") 展示接口的基本信息和它的请求方法,可加可不加

下面是代码信息,之后的所有GET接口都在该类里面写接口方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@RestController
@Api(value = "/", tags = {SwaggerConfig.TagGet} )
public class MyGetMethod {

@RequestMapping(value = "/getCookies", method = RequestMethod.GET)
@ApiOperation(value = "通过这个方法可以获得cookies", httpMethod = "GET")
public String getCookies(HttpServletResponse response){

// HttpServerletRequest 装请求信息类
// HttpServerletResponse 装响应信息类

Cookie cookie = new Cookie("login", "True");

response.addCookie(cookie);

return "恭喜获得cookies信息成功";
}
}

上面就是返回cookie的get接口开发,接下来就是 需要携带cookies信息才能访问的get请求

文章作者: gglss
文章链接: http://example.com/posts/24951.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/25343.html b/posts/25343.html index 8cc76b77c..fccacdb19 100644 --- a/posts/25343.html +++ b/posts/25343.html @@ -1 +1 @@ -本地镜像发布到阿里云 | GGLSS

本地镜像发布到阿里云

本地镜像发布到阿里云


使用docker进行对docker镜像功能的新增后,需要发布到阿里云上对镜像进行同步,下次pull镜像就不要pull缩减版的镜像,直接pull更新后的镜像,方便后续使用

执行顺序

  • 阿里云开发者平台
  • 点击镜像容器服务
  • 创建镜像仓库
    • 创建命名空间
    • 创建镜像仓库

然后在基本信息上面就可以看到仓库指南

根据指南进行操作

文章作者: gglss
文章链接: http://example.com/posts/25343.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +本地镜像发布到阿里云 | GGLSS

本地镜像发布到阿里云

本地镜像发布到阿里云


使用docker进行对docker镜像功能的新增后,需要发布到阿里云上对镜像进行同步,下次pull镜像就不要pull缩减版的镜像,直接pull更新后的镜像,方便后续使用

执行顺序

  • 阿里云开发者平台
  • 点击镜像容器服务
  • 创建镜像仓库
    • 创建命名空间
    • 创建镜像仓库

然后在基本信息上面就可以看到仓库指南

根据指南进行操作

文章作者: gglss
文章链接: http://example.com/posts/25343.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/26527.html b/posts/26527.html index dad455c07..78272bcbd 100644 --- a/posts/26527.html +++ b/posts/26527.html @@ -1 +1 @@ -css教程一 | GGLSS

css教程一

css选择器

元素选择器(Element Selector)

通过元素名称选择 HTML 元素。

1
2
3
4
5
// 如下代码,p 选择器将选择所有 <p> 元素:

p {
color: blue;
}

类选择器(Class Selector)

通过类别名称选择具有特定类别的 HTML 元素。

1
2
3
4
5
6
// 类选择器以 . 开头,后面跟着类别名称。
// 如下代码,.highlight 选择器将选择所有具有类别为 "highlight" 的元素。

.highlight {
background-color: yellow;
}

ID 选择器(ID Selector)

通过元素的唯一标识符(ID)选择 HTML 元素。

1
2
3
4
5
6
// ID 选择器以 # 开头,后面跟着 ID 名称。
// 如下代码,#runoob 选择器将选择具有 ID 为 "runoob" 的元素。

#runoob {
width: 200px;
}

属性选择器(Attribute Selector)

通过元素的属性选择 HTML 元素。属性选择器可以根据属性名和属性值进行选择。

1
2
3
4
5
// 如下代码,input[type="text"] 选择器将选择所有 type 属性为 "text" 的 <input> 元素。

input[type="text"] {
border: 1px solid gray;
}

后代选择器(Descendant Selector)

通过指定元素的后代关系选择 HTML 元素。

1
2
3
4
5
6
// 后代选择器使用空格分隔元素名称。
// 如下代码,div p 选择器将选择所有在 <div> 元素内的 <p> 元素。

div p {
font-weight: bold;
}

背景: background 属性

文章作者: gglss
文章链接: http://example.com/posts/26527.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +css教程一 | GGLSS

css教程一

css选择器

元素选择器(Element Selector)

通过元素名称选择 HTML 元素。

1
2
3
4
5
// 如下代码,p 选择器将选择所有 <p> 元素:

p {
color: blue;
}

类选择器(Class Selector)

通过类别名称选择具有特定类别的 HTML 元素。

1
2
3
4
5
6
// 类选择器以 . 开头,后面跟着类别名称。
// 如下代码,.highlight 选择器将选择所有具有类别为 "highlight" 的元素。

.highlight {
background-color: yellow;
}

ID 选择器(ID Selector)

通过元素的唯一标识符(ID)选择 HTML 元素。

1
2
3
4
5
6
// ID 选择器以 # 开头,后面跟着 ID 名称。
// 如下代码,#runoob 选择器将选择具有 ID 为 "runoob" 的元素。

#runoob {
width: 200px;
}

属性选择器(Attribute Selector)

通过元素的属性选择 HTML 元素。属性选择器可以根据属性名和属性值进行选择。

1
2
3
4
5
// 如下代码,input[type="text"] 选择器将选择所有 type 属性为 "text" 的 <input> 元素。

input[type="text"] {
border: 1px solid gray;
}

后代选择器(Descendant Selector)

通过指定元素的后代关系选择 HTML 元素。

1
2
3
4
5
6
// 后代选择器使用空格分隔元素名称。
// 如下代码,div p 选择器将选择所有在 <div> 元素内的 <p> 元素。

div p {
font-weight: bold;
}

背景: background 属性

文章作者: gglss
文章链接: http://example.com/posts/26527.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/26691.html b/posts/26691.html index c210e42b6..7231e6585 100644 --- a/posts/26691.html +++ b/posts/26691.html @@ -1 +1 @@ -Jmeter之json数据提取和参数传递 | GGLSS

Jmeter之json数据提取和参数传递

安装组件JSON Extractor

  • 右键Http Request
  • 点击Add -> Post Processors -> JSON Extractor

组件安装成功

组件配置

  • Names of created variables : 参数变量名称,提取出来的json使用这个变量
  • Json Path expressions : JSON提取的正则 比如:$.access_token这个是提取response里面的token
  • Match NO.(0 for Random):这个是写提取出json的第几条, 比如使用正则能匹配多条,使用这个输入数字就可以匹配对应的
引用json变量
  • Jmeter中引用变量的方法${变量名}

调试脚本 Debug Sampler

帮助检查变量值,调试脚本

  • 右键Thread Group
  • 点击Add -> Sampler -> Debug Sampler

注意:把Debug放到所有请求的最底下,运行的后可以查看变量参数,方便调试

文章作者: gglss
文章链接: http://example.com/posts/26691.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Jmeter之json数据提取和参数传递 | GGLSS

Jmeter之json数据提取和参数传递

安装组件JSON Extractor

  • 右键Http Request
  • 点击Add -> Post Processors -> JSON Extractor

组件安装成功

组件配置

  • Names of created variables : 参数变量名称,提取出来的json使用这个变量
  • Json Path expressions : JSON提取的正则 比如:$.access_token这个是提取response里面的token
  • Match NO.(0 for Random):这个是写提取出json的第几条, 比如使用正则能匹配多条,使用这个输入数字就可以匹配对应的
引用json变量
  • Jmeter中引用变量的方法${变量名}

调试脚本 Debug Sampler

帮助检查变量值,调试脚本

  • 右键Thread Group
  • 点击Add -> Sampler -> Debug Sampler

注意:把Debug放到所有请求的最底下,运行的后可以查看变量参数,方便调试

文章作者: gglss
文章链接: http://example.com/posts/26691.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/26726.html b/posts/26726.html index f552cc211..d89ec366c 100644 --- a/posts/26726.html +++ b/posts/26726.html @@ -1 +1 @@ -容器(一) | GGLSS

容器(一)

容器(一)

新建和启动容器

OPTIONS说明:

  • – name = “容器新名称” 为容器制定一个名称
  • -d 后台运行容器并返回容器id, 即启动守护式容器(后台运行)
  • -i 以交互模式运行容器,通常与 -t 同时使用
  • -t 为容器重新分配一个伪输入终端,通常与 -i 连用,也就是启动交互式容器
  • -P 随机端口映射
  • -p 指定端口映射

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu:15.10 /bin/bash
root@4fb757f69adb:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:26 pts/0 00:00:00 /bin/bash
root 11 1 0 03:26 pts/0 00:00:00 ps -ef
root@4fb757f69adb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4fb757f69adb:/# exit
exit
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

docker run -it ubuntu:15.10 /bin/bash
/bin/bash 希望有交互式shell 就用/bin/bash

查询正在运行的容器

docker ps [OPTIONS]

1
2
3
4
5
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdee90a8c77d ubuntu "bash" 3 minutes ago Exited (0) 3 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 5 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

OPTIONS:

  • -a 展示所有容器,包含历史用过容器
  • -d 只展示容器id
  • -l 显示最近创建的容器
  • -n 展示最近创建的前n个容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    List containers
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -n 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 2
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    0dcaa91afc0e ubuntu "/bin/bush" 19 minutes ago Created myubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

退出容器

  • exit

run进入容器,exit退出容器, 容器停止

  • ctrl + p + q

run进入容器,exit退出容器, 容器不停止

1
2
3
4
5
6
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu bash
root@562278524cda:/# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 16 seconds ago Up 15 seconds loving_dewdney
文章作者: gglss
文章链接: http://example.com/posts/26726.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +容器(一) | GGLSS

容器(一)

容器(一)

新建和启动容器

OPTIONS说明:

  • – name = “容器新名称” 为容器制定一个名称
  • -d 后台运行容器并返回容器id, 即启动守护式容器(后台运行)
  • -i 以交互模式运行容器,通常与 -t 同时使用
  • -t 为容器重新分配一个伪输入终端,通常与 -i 连用,也就是启动交互式容器
  • -P 随机端口映射
  • -p 指定端口映射

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu:15.10 /bin/bash
root@4fb757f69adb:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:26 pts/0 00:00:00 /bin/bash
root 11 1 0 03:26 pts/0 00:00:00 ps -ef
root@4fb757f69adb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4fb757f69adb:/# exit
exit
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

docker run -it ubuntu:15.10 /bin/bash
/bin/bash 希望有交互式shell 就用/bin/bash

查询正在运行的容器

docker ps [OPTIONS]

1
2
3
4
5
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdee90a8c77d ubuntu "bash" 3 minutes ago Exited (0) 3 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 5 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

OPTIONS:

  • -a 展示所有容器,包含历史用过容器
  • -d 只展示容器id
  • -l 显示最近创建的容器
  • -n 展示最近创建的前n个容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    List containers
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -n 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 2
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    0dcaa91afc0e ubuntu "/bin/bush" 19 minutes ago Created myubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

退出容器

  • exit

run进入容器,exit退出容器, 容器停止

  • ctrl + p + q

run进入容器,exit退出容器, 容器不停止

1
2
3
4
5
6
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu bash
root@562278524cda:/# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 16 seconds ago Up 15 seconds loving_dewdney
文章作者: gglss
文章链接: http://example.com/posts/26726.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/27832.html b/posts/27832.html index b7dfbb4f9..217df3939 100644 --- a/posts/27832.html +++ b/posts/27832.html @@ -1 +1 @@ -Shell函数 | GGLSS

Shell函数

系统函数
basename基本语法
1
basename [string/ pathname][文件后缀] 

basename命令会删掉所有的前缀,只留一个文件名

选项:

如果指定后缀,basename会将pathname或string中的文件后缀去掉

举个栗子

截取该/opt/banzhang.txt路径的文件名称

1
2
3
4
5
[root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt
banzhang.txt
[root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt .txt
banzhang
[root@b09ed0cc2c9d opt]#
dirname基本语法
1
dirname 文件绝对路径

从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录部分)

举个栗子
1
2
3
[root@b09ed0cc2c9d opt]# dirname /opt/banzhang.txt
/opt
[root@b09ed0cc2c9d opt]#
自定义函数
基本语法
1
2
3
4
5
6
7
[function] funname[()]
{
Action;
[retion int;]
}

funname
举个栗子
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

function sum()
{
s=0;
s=$[$1+$2]
echo $s
}

read -p "input your paratemer1:" p1
read -p "input your oaeayemer2:" p2

sum $p1 $p2
文章作者: gglss
文章链接: http://example.com/posts/27832.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell函数 | GGLSS

Shell函数

系统函数
basename基本语法
1
basename [string/ pathname][文件后缀] 

basename命令会删掉所有的前缀,只留一个文件名

选项:

如果指定后缀,basename会将pathname或string中的文件后缀去掉

举个栗子

截取该/opt/banzhang.txt路径的文件名称

1
2
3
4
5
[root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt
banzhang.txt
[root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt .txt
banzhang
[root@b09ed0cc2c9d opt]#
dirname基本语法
1
dirname 文件绝对路径

从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录部分)

举个栗子
1
2
3
[root@b09ed0cc2c9d opt]# dirname /opt/banzhang.txt
/opt
[root@b09ed0cc2c9d opt]#
自定义函数
基本语法
1
2
3
4
5
6
7
[function] funname[()]
{
Action;
[retion int;]
}

funname
举个栗子
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

function sum()
{
s=0;
s=$[$1+$2]
echo $s
}

read -p "input your paratemer1:" p1
read -p "input your oaeayemer2:" p2

sum $p1 $p2
文章作者: gglss
文章链接: http://example.com/posts/27832.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/28702.html b/posts/28702.html index 0781cda38..c150d9ac1 100644 --- a/posts/28702.html +++ b/posts/28702.html @@ -1 +1 @@ -如何使用pyyaml获取yaml里面的数据 | GGLSS

如何使用pyyaml获取yaml里面的数据

准备数据

在config目录下创建environment.yaml文件

1
2
username: 周杰伦
password: 123456
使用pyyaml获取yaml中的数据
解析yaml文件

首先创建yaml_config文件,为了方便自动化后面的引用,需要创建一个类,在__init__里面打开yaml文件,使用yaml.load(文件名称, Loader=yaml.FullLoader )方法获取数据

打印出字典格式的数据{'username': '周杰伦', 'password': 123456}

1
2
3
4
5
6
7
8
9
import yaml
from common.tools import get_project_path, sep


class GetConf:
def __init__(self):
with open(../config.environment.yaml), "r", encoding="utf-8")\
as env_file:
self.env = yaml.load(env_file, Loader=yaml.FullLoader)

现在使用的是相对路径,后期如果换系统,或者更换文件位置,就需要自己获得文件路径,下面对代码进行优化

优化项:获得项目名称的url地址

创建get_project_path方法,获取项目根目录的绝对路径

首先定义一个变量,变量的值是项目的名称project_name = "trading_system_autotest"

获取当前文件的所在目录的绝对路径,需要使用python的os模块file_path=os.path.dirname(__file__)

在绝对路径中找到项目名称的下标位置file_path.find(project_name)

找到项目所在目录的绝对路径下标+项目名称的长度=项目根目录的绝对路径的下标file_path.find(project_name)+len(project_name)

然后对所在目录的绝对路径file_path进行切片获得项目根目录的绝对路径

file_path[: file_path.find(project_name)+len(project_name)]

1
2
3
4
5
6
7
8
9
10
11
12
13
def get_project_path():
"""
获取项目根目录的绝对路径
:return:
"""
project_name = "trading_system_autotest"
# 获取当前文件的所在目录的绝对路径
file_path = os.path.dirname(__file__)
# # 在绝对路径中找到项目名称的下标位置
# print(file_path.find(project_name))
# 找到项目所在目录的绝对路径+项目名称的长度=项目的绝对路径
# print(len(project_name))
return file_path[: file_path.find(project_name)+len(project_name)]
优化项:获得拼接后的目录和文件

创建sep(path, add_sep_before=False, add_sep_after=False)方法,获得文件和目录的拼接

变量

path变量需要传输一个列表,列表里面是文件所在目录和文件名称,如[文件所在目录,文件名称]

首先使用os.sep.join对列表的字段进行拼接all_path = os.sep.join(path)

add_sep_before进行判断,如果是True,就在前面添加拼接符all_path = os.sep + all_path

add_sep_after进行判断,如果是True,就在后面添加拼接符all_path = all_path + os.sep

windows格式拼接符有可能错误,就要对拼接符转换格式all_path = all_path.replace('\\', '/'),就算没有这个代码,也可以运行出来,只是调试该代码看起来不好看

然后返回all_path

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def sep(path, add_sep_before=False, add_sep_after=False):
"""
:param path: is list format:[Current directory , Current file]
:param add_sep_before: Add before directory "/"
:param add_sep_after: Add after directory "/"
:return: Current directory/Current file
"""
all_path = os.sep.join(path)
# 在前面添加\
if add_sep_before:
all_path = os.sep + all_path
# 在后面添加\
if add_sep_after:
all_path = all_path + os.sep
# 转换格式 把\转换为/
all_path = all_path.replace('\\', '/')
return all_path
优化后的代码
1
2
3
4
5
6
7
8
9
class GetConf:
def __init__(self):
with open(get_project_path()+sep(["config", "environment.yaml"], add_sep_before=True), "r", encoding="utf-8")\
as env_file:
self.env = yaml.load(env_file, Loader=yaml.FullLoader)
print(self.env)

def get_username_password(self):
return self.env["username"], self.env["password"]
文章作者: gglss
文章链接: http://example.com/posts/28702.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +如何使用pyyaml获取yaml里面的数据 | GGLSS

如何使用pyyaml获取yaml里面的数据

准备数据

在config目录下创建environment.yaml文件

1
2
username: 周杰伦
password: 123456
使用pyyaml获取yaml中的数据
解析yaml文件

首先创建yaml_config文件,为了方便自动化后面的引用,需要创建一个类,在__init__里面打开yaml文件,使用yaml.load(文件名称, Loader=yaml.FullLoader )方法获取数据

打印出字典格式的数据{'username': '周杰伦', 'password': 123456}

1
2
3
4
5
6
7
8
9
import yaml
from common.tools import get_project_path, sep


class GetConf:
def __init__(self):
with open(../config.environment.yaml), "r", encoding="utf-8")\
as env_file:
self.env = yaml.load(env_file, Loader=yaml.FullLoader)

现在使用的是相对路径,后期如果换系统,或者更换文件位置,就需要自己获得文件路径,下面对代码进行优化

优化项:获得项目名称的url地址

创建get_project_path方法,获取项目根目录的绝对路径

首先定义一个变量,变量的值是项目的名称project_name = "trading_system_autotest"

获取当前文件的所在目录的绝对路径,需要使用python的os模块file_path=os.path.dirname(__file__)

在绝对路径中找到项目名称的下标位置file_path.find(project_name)

找到项目所在目录的绝对路径下标+项目名称的长度=项目根目录的绝对路径的下标file_path.find(project_name)+len(project_name)

然后对所在目录的绝对路径file_path进行切片获得项目根目录的绝对路径

file_path[: file_path.find(project_name)+len(project_name)]

1
2
3
4
5
6
7
8
9
10
11
12
13
def get_project_path():
"""
获取项目根目录的绝对路径
:return:
"""
project_name = "trading_system_autotest"
# 获取当前文件的所在目录的绝对路径
file_path = os.path.dirname(__file__)
# # 在绝对路径中找到项目名称的下标位置
# print(file_path.find(project_name))
# 找到项目所在目录的绝对路径+项目名称的长度=项目的绝对路径
# print(len(project_name))
return file_path[: file_path.find(project_name)+len(project_name)]
优化项:获得拼接后的目录和文件

创建sep(path, add_sep_before=False, add_sep_after=False)方法,获得文件和目录的拼接

变量

path变量需要传输一个列表,列表里面是文件所在目录和文件名称,如[文件所在目录,文件名称]

首先使用os.sep.join对列表的字段进行拼接all_path = os.sep.join(path)

add_sep_before进行判断,如果是True,就在前面添加拼接符all_path = os.sep + all_path

add_sep_after进行判断,如果是True,就在后面添加拼接符all_path = all_path + os.sep

windows格式拼接符有可能错误,就要对拼接符转换格式all_path = all_path.replace('\\', '/'),就算没有这个代码,也可以运行出来,只是调试该代码看起来不好看

然后返回all_path

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def sep(path, add_sep_before=False, add_sep_after=False):
"""
:param path: is list format:[Current directory , Current file]
:param add_sep_before: Add before directory "/"
:param add_sep_after: Add after directory "/"
:return: Current directory/Current file
"""
all_path = os.sep.join(path)
# 在前面添加\
if add_sep_before:
all_path = os.sep + all_path
# 在后面添加\
if add_sep_after:
all_path = all_path + os.sep
# 转换格式 把\转换为/
all_path = all_path.replace('\\', '/')
return all_path
优化后的代码
1
2
3
4
5
6
7
8
9
class GetConf:
def __init__(self):
with open(get_project_path()+sep(["config", "environment.yaml"], add_sep_before=True), "r", encoding="utf-8")\
as env_file:
self.env = yaml.load(env_file, Loader=yaml.FullLoader)
print(self.env)

def get_username_password(self):
return self.env["username"], self.env["password"]
文章作者: gglss
文章链接: http://example.com/posts/28702.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/2943790551.html b/posts/2943790551.html index 3cc33bf34..fda857531 100644 --- a/posts/2943790551.html +++ b/posts/2943790551.html @@ -1 +1 @@ -为博客编写bat文件 | GGLSS

为博客编写bat文件

.bat

window发布hexo博客时,需要多个命令,现在编写bat文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@echo off
echo ====================================
echo 欢迎使用 Hexo 命令助手 请选择命令
echo 本地测试或上传网站时,将自动清理缓存
echo ====================================
echo 1. 访问作者博客
echo 2. 本地测试
echo 3. 上传网站
echo 4. 清理缓存
echo 5. 新建文章
echo 6. 新建页面
echo .
set /p input="请选择命令并按下回车:"
if %input%==1 goto A
if %input%==2 goto B
if %input%==3 goto C
if %input%==4 goto D
if %input%==5 goto E
if %input%==6 goto F

:A
cls
start https://hipeach.eu.org
exit

:B
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && hexo s && pause && exit"


:C
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && hexo d && echo. && echo 指令已完成 如出错请检查配置 && pause && cls && 运行脚本.bat"
exit

:D
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && pause && cls && 运行脚本.bat"
exit

:E
cls
set /p t1="请输入文章文件名:"
start cmd.exe /k "hexo n %t1% && echo. && echo 已在 source/_posts 目录下生成文件:%t1%.md 与 资源文件夹: %t1% && pause && exit"
exit

:F
cls
set /p t2="请输入独立页面文件名:"
start cmd.exe /k "hexo n page %t2% && echo. && echo 已在 source 目录下生成一个文件夹: %t2% 并在文件夹内创建了文件: %t2%.md && pause && exit"
exit

pause
文章作者: gglss
文章链接: http://example.com/posts/2943790551.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +为博客编写bat文件 | GGLSS

为博客编写bat文件

.bat

window发布hexo博客时,需要多个命令,现在编写bat文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@echo off
echo ====================================
echo 欢迎使用 Hexo 命令助手 请选择命令
echo 本地测试或上传网站时,将自动清理缓存
echo ====================================
echo 1. 访问作者博客
echo 2. 本地测试
echo 3. 上传网站
echo 4. 清理缓存
echo 5. 新建文章
echo 6. 新建页面
echo .
set /p input="请选择命令并按下回车:"
if %input%==1 goto A
if %input%==2 goto B
if %input%==3 goto C
if %input%==4 goto D
if %input%==5 goto E
if %input%==6 goto F

:A
cls
start https://hipeach.eu.org
exit

:B
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && hexo s && pause && exit"


:C
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && hexo d && echo. && echo 指令已完成 如出错请检查配置 && pause && cls && 运行脚本.bat"
exit

:D
start cmd.exe /k "@echo off && hexo cl && echo. && echo 已清理缓存 && pause && cls && 运行脚本.bat"
exit

:E
cls
set /p t1="请输入文章文件名:"
start cmd.exe /k "hexo n %t1% && echo. && echo 已在 source/_posts 目录下生成文件:%t1%.md 与 资源文件夹: %t1% && pause && exit"
exit

:F
cls
set /p t2="请输入独立页面文件名:"
start cmd.exe /k "hexo n page %t2% && echo. && echo 已在 source 目录下生成一个文件夹: %t2% 并在文件夹内创建了文件: %t2%.md && pause && exit"
exit

pause
文章作者: gglss
文章链接: http://example.com/posts/2943790551.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/29537.html b/posts/29537.html index 06286fb9a..b40458f98 100644 --- a/posts/29537.html +++ b/posts/29537.html @@ -1 +1 @@ -随机控制器Random Controller和Random Order Controller | GGLSS

随机控制器Random Controller和Random Order Controller

作用

  • Random Controller:控制器子节点随机运行一个请求
    • lgnore sub-controller blocks:忽略子控制器块
  • Random Order Controller:控制器子节点随机运行全部请求
文章作者: gglss
文章链接: http://example.com/posts/29537.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +随机控制器Random Controller和Random Order Controller | GGLSS

随机控制器Random Controller和Random Order Controller

作用

  • Random Controller:控制器子节点随机运行一个请求
    • lgnore sub-controller blocks:忽略子控制器块
  • Random Order Controller:控制器子节点随机运行全部请求
文章作者: gglss
文章链接: http://example.com/posts/29537.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/31621.html b/posts/31621.html index 4908adcd3..0ca4787df 100644 --- a/posts/31621.html +++ b/posts/31621.html @@ -1 +1 @@ -Yaml的使用 | GGLSS

Yaml的使用

编写字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#字符串
#单行
username: admin
username1: "周杰\n伦" #双引号不转义
username2: '周杰\n伦' ##单引号转义
#多行
william:



william2: |




william3: >



回显的结果是:

1
2
3
4
5
6
{ username: 'admin',
username1: '周杰\n伦',
username2: '周杰\\n伦',
william: '一 二 三',
william2: '一\n二\n三\n',
william3: '一 二 三\n' }
强制转换
1
2
3
forceStr: !!str 123
forceBoll: !!str true
forceInt: !!int "123"

回显的结果是:

1
2
3
forceStr: '123',
forceBoll: 'true',
forceInt: 123 }
编写数组
1
2
3
4
5
6
#数组
myFavourite:
- backaetball
- football

myFavourite2: ["bass","bahddd"]

回显的结果是:

1
2
myFavourite: [ 'backaetball', 'football' ],
myFavourite2: [ 'bass', 'bahddd' ],
编写对象
1
2
3
4
5
6
7
8
#对象
autotest:
username: root
password: root
age: 18
male: true

autotest2: [{username: admin, password: root, age: 22, male: false}]

回显的结果是:

1
2
autotest: { username: 'root', password: 'root', age: 18, male: true },
autotest2: [ { username: 'admin', password: 'root', age: 22, male: false } ],
编写复合结构的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#复合结构
companies:
-
id: 1
name: zhangsan
value: 10e+11

-
id: 2
name: lisi
value: 10e+12


websites:
baidu: www.baidu.com
google: www.google.com

回显的结果是:

1
2
3
4
companies: 
[ { id: 1, name: 'zhangsan', value: 1000000000000 },
{ id: 2, name: 'lisi', value: 10000000000000 } ],
websites: { baidu: 'www.baidu.com', google: 'www.google.com' } }
引用
1
2
3
4
5
6
7
8
#引用
father: &father_lastName
lastName:

son:
<<: *father_lastName
firstName:
age: 18

回显的结果是:

1
2
father: { lastName: '周' },
son: { lastName: '周', firstName: '董', age: 18 } }
文章作者: gglss
文章链接: http://example.com/posts/31621.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Yaml的使用 | GGLSS

Yaml的使用

编写字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#字符串
#单行
username: admin
username1: "周杰\n伦" #双引号不转义
username2: '周杰\n伦' ##单引号转义
#多行
william:



william2: |




william3: >



回显的结果是:

1
2
3
4
5
6
{ username: 'admin',
username1: '周杰\n伦',
username2: '周杰\\n伦',
william: '一 二 三',
william2: '一\n二\n三\n',
william3: '一 二 三\n' }
强制转换
1
2
3
forceStr: !!str 123
forceBoll: !!str true
forceInt: !!int "123"

回显的结果是:

1
2
3
forceStr: '123',
forceBoll: 'true',
forceInt: 123 }
编写数组
1
2
3
4
5
6
#数组
myFavourite:
- backaetball
- football

myFavourite2: ["bass","bahddd"]

回显的结果是:

1
2
myFavourite: [ 'backaetball', 'football' ],
myFavourite2: [ 'bass', 'bahddd' ],
编写对象
1
2
3
4
5
6
7
8
#对象
autotest:
username: root
password: root
age: 18
male: true

autotest2: [{username: admin, password: root, age: 22, male: false}]

回显的结果是:

1
2
autotest: { username: 'root', password: 'root', age: 18, male: true },
autotest2: [ { username: 'admin', password: 'root', age: 22, male: false } ],
编写复合结构的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#复合结构
companies:
-
id: 1
name: zhangsan
value: 10e+11

-
id: 2
name: lisi
value: 10e+12


websites:
baidu: www.baidu.com
google: www.google.com

回显的结果是:

1
2
3
4
companies: 
[ { id: 1, name: 'zhangsan', value: 1000000000000 },
{ id: 2, name: 'lisi', value: 10000000000000 } ],
websites: { baidu: 'www.baidu.com', google: 'www.google.com' } }
引用
1
2
3
4
5
6
7
8
#引用
father: &father_lastName
lastName:

son:
<<: *father_lastName
firstName:
age: 18

回显的结果是:

1
2
father: { lastName: '周' },
son: { lastName: '周', firstName: '董', age: 18 } }
文章作者: gglss
文章链接: http://example.com/posts/31621.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/31868.html b/posts/31868.html index 74e2ee91c..e6fdc37b9 100644 --- a/posts/31868.html +++ b/posts/31868.html @@ -1 +1 @@ -逻辑控制器Simple Controller | GGLSS

逻辑控制器Simple Controller

作用

把多个请求放入Simple Controller,可以多个请求进行同时操作

文章作者: gglss
文章链接: http://example.com/posts/31868.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +逻辑控制器Simple Controller | GGLSS

逻辑控制器Simple Controller

作用

把多个请求放入Simple Controller,可以多个请求进行同时操作

文章作者: gglss
文章链接: http://example.com/posts/31868.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/32161.html b/posts/32161.html index 391b70109..294c4ded9 100644 --- a/posts/32161.html +++ b/posts/32161.html @@ -1 +1 @@ -使用docker安装常用软件:redis | GGLSS

使用docker安装常用软件:redis

使用docker安装常用软件:redis

使用docker pull redis:6.0.8 拉取redis:6.0.8镜像

创建容器

容器卷要加入--privileged=true

在宿主机下新建目录mkdir -p /app/redis

文章作者: gglss
文章链接: http://example.com/posts/32161.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用docker安装常用软件:redis | GGLSS

使用docker安装常用软件:redis

使用docker安装常用软件:redis

使用docker pull redis:6.0.8 拉取redis:6.0.8镜像

创建容器

容器卷要加入--privileged=true

在宿主机下新建目录mkdir -p /app/redis

文章作者: gglss
文章链接: http://example.com/posts/32161.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/3219.html b/posts/3219.html index 240662b45..73152e118 100644 --- a/posts/3219.html +++ b/posts/3219.html @@ -1 +1 @@ -Jmeter之静默压测 | GGLSS

Jmeter之静默压测

静默压测

jmeter -n -t $jmx_file -l $jtl_file

如: jmeter -n -t HTTP代理服务器luzhi.jmx -l result.jtl

jmx: Jmeter压测程序脚本文件
jtl: Jmeter压测请求响应数据的原始文件,查看结果树和聚合报告可以导入该文件查看

文章作者: gglss
文章链接: http://example.com/posts/3219.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Jmeter之静默压测 | GGLSS

Jmeter之静默压测

静默压测

jmeter -n -t $jmx_file -l $jtl_file

如: jmeter -n -t HTTP代理服务器luzhi.jmx -l result.jtl

jmx: Jmeter压测程序脚本文件
jtl: Jmeter压测请求响应数据的原始文件,查看结果树和聚合报告可以导入该文件查看

文章作者: gglss
文章链接: http://example.com/posts/3219.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/32473.html b/posts/32473.html index 288834963..8235b06d9 100644 --- a/posts/32473.html +++ b/posts/32473.html @@ -1 +1 @@ -性能测试主要关注点 | GGLSS

性能测试主要关注点

性能关注点

接口响应时间

吞吐量

TPS: 事务处理能力,每秒处理事务数(打开页面、登录、选择商品、加入购物车、下单、付款)

注意:“日活” 每日活跃用户数,是运营数据,与性能无关

八二原则

计算QPS/TPS

相信80%会集中在20%时间内,24小时的流量集中在白天8小时内,同时在午高峰达到高峰

举个栗子

根据相应耗时计算公式预估所需并发,一次请求100ms

根据 QPS = Vue * Rt

1000000 * 80% / 8 * 3600 * 20% = 277 QPS

需要27个并发

文章作者: gglss
文章链接: http://example.com/posts/32473.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +性能测试主要关注点 | GGLSS

性能测试主要关注点

性能关注点

接口响应时间

吞吐量

TPS: 事务处理能力,每秒处理事务数(打开页面、登录、选择商品、加入购物车、下单、付款)

注意:“日活” 每日活跃用户数,是运营数据,与性能无关

八二原则

计算QPS/TPS

相信80%会集中在20%时间内,24小时的流量集中在白天8小时内,同时在午高峰达到高峰

举个栗子

根据相应耗时计算公式预估所需并发,一次请求100ms

根据 QPS = Vue * Rt

1000000 * 80% / 8 * 3600 * 20% = 277 QPS

需要27个并发

文章作者: gglss
文章链接: http://example.com/posts/32473.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/34250.html b/posts/34250.html index 717b1ee92..de42b05a9 100644 --- a/posts/34250.html +++ b/posts/34250.html @@ -1 +1 @@ -Modeule Controller和Include Controller | GGLSS

Modeule Controller和Include Controller

Modeule Controller介绍

文章作者: gglss
文章链接: http://example.com/posts/34250.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Modeule Controller和Include Controller | GGLSS

Modeule Controller和Include Controller

Modeule Controller介绍

文章作者: gglss
文章链接: http://example.com/posts/34250.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/34655.html b/posts/34655.html index 758cdf5d5..b82496085 100644 --- a/posts/34655.html +++ b/posts/34655.html @@ -1 +1 @@ -抽象类与接口 | GGLSS

抽象类与接口

抽象类

使用abstract修饰一个类,把这个类变成抽象类,抽象类不能直接创建对象,需要其他类进行继承该抽象类

  • 抽象方法不能有方法体
  • 抽象方法必须使用abstract进行修饰,不能有方法体
  • 子类必须实现父抽象类的方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public abstract class Ahsse {
    String name;
    int age;

    //普通方法
    public String aaa(){
    return name;
    };
    // 抽象方法
    public abstract String bbb();
    }

    class sss extends Ahsse{

    @Override
    public String bbb() {
    System.out.println("实现抽象类的抽象方法");
    return "ces ";
    }
    }

接口

使用interface定义接口,相当于class

  • 接口可以多继承
  • 变量全部默认使用public static final修饰,使用之前必须赋值
  • 类里面全部是抽象方法(默认使用public abstract修饰,没有方法体)需要被实现类进行实现
  • 接口可以被多实现–implements
文章作者: gglss
文章链接: http://example.com/posts/34655.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +抽象类与接口 | GGLSS

抽象类与接口

抽象类

使用abstract修饰一个类,把这个类变成抽象类,抽象类不能直接创建对象,需要其他类进行继承该抽象类

  • 抽象方法不能有方法体
  • 抽象方法必须使用abstract进行修饰,不能有方法体
  • 子类必须实现父抽象类的方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public abstract class Ahsse {
    String name;
    int age;

    //普通方法
    public String aaa(){
    return name;
    };
    // 抽象方法
    public abstract String bbb();
    }

    class sss extends Ahsse{

    @Override
    public String bbb() {
    System.out.println("实现抽象类的抽象方法");
    return "ces ";
    }
    }

接口

使用interface定义接口,相当于class

  • 接口可以多继承
  • 变量全部默认使用public static final修饰,使用之前必须赋值
  • 类里面全部是抽象方法(默认使用public abstract修饰,没有方法体)需要被实现类进行实现
  • 接口可以被多实现–implements
文章作者: gglss
文章链接: http://example.com/posts/34655.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/36554.html b/posts/36554.html index 52ae92332..7cba0bda0 100644 --- a/posts/36554.html +++ b/posts/36554.html @@ -1 +1 @@ -_3主3从的`Redis集群`搭建(下) | GGLSS

_3主3从的`Redis集群`搭建(下)

_3主3从的Redis集群搭建(下)

进入主机6381

redis-cli -p 6381

查看集群信息

cluster info

查看主机和从机之间的主从关系

cluster nodes

image-20220509101455220

文章作者: gglss
文章链接: http://example.com/posts/36554.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +_3主3从的`Redis集群`搭建(下) | GGLSS

_3主3从的`Redis集群`搭建(下)

_3主3从的Redis集群搭建(下)

进入主机6381

redis-cli -p 6381

查看集群信息

cluster info

查看主机和从机之间的主从关系

cluster nodes

image-20220509101455220

文章作者: gglss
文章链接: http://example.com/posts/36554.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/38168.html b/posts/38168.html index c15cf6e5f..a919a6a5c 100644 --- a/posts/38168.html +++ b/posts/38168.html @@ -1 +1 @@ -Shell脚本初探 | GGLSS

Shell脚本初探

编写shell脚本时,必须以 #! /bin/bash 开头

在linux创建helloworld.sh文件,在文件内输入:

1
2
3
#!/bin/bash
#################
echo "hello World"

然后保存该文件

运行.sh文件时,有两种方法可以运行

第一种是给该文件添加可执行权限
1
chmod +x ./helloworld.sh

运行文件:./ 不能省略

1
./helloworld.sh
第二种是使用bash或sh 文件路径运行该文件
1
2
3
bash helloworld.sh
#
sh helloworld.sh
文章作者: gglss
文章链接: http://example.com/posts/38168.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell脚本初探 | GGLSS

Shell脚本初探

编写shell脚本时,必须以 #! /bin/bash 开头

在linux创建helloworld.sh文件,在文件内输入:

1
2
3
#!/bin/bash
#################
echo "hello World"

然后保存该文件

运行.sh文件时,有两种方法可以运行

第一种是给该文件添加可执行权限
1
chmod +x ./helloworld.sh

运行文件:./ 不能省略

1
./helloworld.sh
第二种是使用bash或sh 文件路径运行该文件
1
2
3
bash helloworld.sh
#
sh helloworld.sh
文章作者: gglss
文章链接: http://example.com/posts/38168.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/408340008.html b/posts/408340008.html index d43bfc959..14886df13 100644 --- a/posts/408340008.html +++ b/posts/408340008.html @@ -1 +1 @@ -Mac提示安装包损坏 | GGLSS

Mac提示安装包损坏

Mac 提示文件已损坏,您应该将它移到废纸篓

解决办法:

在终端输入

sudo xattr -d com.apple.quarantine /Applications/PicGo.app

/后面是安装路径

然后输入密码

文章作者: gglss
文章链接: http://example.com/posts/408340008.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Mac提示安装包损坏 | GGLSS

Mac提示安装包损坏

Mac 提示文件已损坏,您应该将它移到废纸篓

解决办法:

在终端输入

sudo xattr -d com.apple.quarantine /Applications/PicGo.app

/后面是安装路径

然后输入密码

文章作者: gglss
文章链接: http://example.com/posts/408340008.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/40953.html b/posts/40953.html index 1098b503e..a50ec94f9 100644 --- a/posts/40953.html +++ b/posts/40953.html @@ -1 +1 @@ -Gaussian Random Timer定时器 | GGLSS

Gaussian Random Timer定时器

作用

生成随机等待时间

参数

  • Deviation(in milliseconds) :高斯定时器参数,随机的
  • Constant Delay Offset(in milliseconds):固定等待时长

生成的时长是Deviation + Constant Delay Offset

文章作者: gglss
文章链接: http://example.com/posts/40953.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Gaussian Random Timer定时器 | GGLSS

Gaussian Random Timer定时器

作用

生成随机等待时间

参数

  • Deviation(in milliseconds) :高斯定时器参数,随机的
  • Constant Delay Offset(in milliseconds):固定等待时长

生成的时长是Deviation + Constant Delay Offset

文章作者: gglss
文章链接: http://example.com/posts/40953.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/41091.html b/posts/41091.html index b7aa7e3e4..c2826b0c2 100644 --- a/posts/41091.html +++ b/posts/41091.html @@ -1 +1 @@ -Shell脚本入门 | GGLSS

Shell脚本入门

创建txt文件并向txt文件追加数据

首先创建test_shell.sh文件

1
touch test_shell.sh

test_shell.sh文件输入shell脚本

  • 使用shell创建banzhang.txt文件

  • 在文件中追加数据echo "aabbccdd" >> banzhang.txt

1
2
3
4
5
6
7
#!/bin/bash
# 指定目录
cd /opt/
# 创建文件
touch banzhang.txt
# 向文件追加数据
echo "touch banzhang" >> banzhang.txt
文章作者: gglss
文章链接: http://example.com/posts/41091.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell脚本入门 | GGLSS

Shell脚本入门

创建txt文件并向txt文件追加数据

首先创建test_shell.sh文件

1
touch test_shell.sh

test_shell.sh文件输入shell脚本

  • 使用shell创建banzhang.txt文件

  • 在文件中追加数据echo "aabbccdd" >> banzhang.txt

1
2
3
4
5
6
7
#!/bin/bash
# 指定目录
cd /opt/
# 创建文件
touch banzhang.txt
# 向文件追加数据
echo "touch banzhang" >> banzhang.txt
文章作者: gglss
文章链接: http://example.com/posts/41091.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/42075.html b/posts/42075.html index d9f0ef40f..cc2c0b23c 100644 --- a/posts/42075.html +++ b/posts/42075.html @@ -1 +1 @@ -开发获得cookie的Post登录接口 | GGLSS

开发获得cookie的Post登录接口

开发获得cookie的Post登录接口

@RequestMapping(value = "/v1")的作用是把这个value和方法上的登录地址进行拼接,比如:/v1/login

@RestController标识该接口可以被托管

方法参数@RequestParam(value = "userName", required = true) String userName,代码中的required = true起到必填的作用

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
@Api(value = "/", tags = {SwaggerConfig.TagPost})
@RequestMapping(value = "/v1")
public class MyPostMethod {

//这个变量用来装cookie信息的
private static Cookie cookie;

//用户登录成功获取到cookies,然后访问其他接口获取到列表
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ApiOperation(value = "登录接口,成功后获取到cookies信息",httpMethod = "POST")
public String login(HttpServletResponse response,
@RequestParam(value = "userName", required = true) String userName,
@RequestParam(value = "password", required = true) String password){
if (userName.equals("zhangsan") && password.equals("123456")){
cookie = new Cookie("login","true");
response.addCookie(cookie);
return "恭喜你登录成功!";
}
return "用户名或密码错误!";

}
文章作者: gglss
文章链接: http://example.com/posts/42075.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +开发获得cookie的Post登录接口 | GGLSS

开发获得cookie的Post登录接口

开发获得cookie的Post登录接口

@RequestMapping(value = "/v1")的作用是把这个value和方法上的登录地址进行拼接,比如:/v1/login

@RestController标识该接口可以被托管

方法参数@RequestParam(value = "userName", required = true) String userName,代码中的required = true起到必填的作用

举个栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
@Api(value = "/", tags = {SwaggerConfig.TagPost})
@RequestMapping(value = "/v1")
public class MyPostMethod {

//这个变量用来装cookie信息的
private static Cookie cookie;

//用户登录成功获取到cookies,然后访问其他接口获取到列表
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ApiOperation(value = "登录接口,成功后获取到cookies信息",httpMethod = "POST")
public String login(HttpServletResponse response,
@RequestParam(value = "userName", required = true) String userName,
@RequestParam(value = "password", required = true) String password){
if (userName.equals("zhangsan") && password.equals("123456")){
cookie = new Cookie("login","true");
response.addCookie(cookie);
return "恭喜你登录成功!";
}
return "用户名或密码错误!";

}
文章作者: gglss
文章链接: http://example.com/posts/42075.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/42174.html b/posts/42174.html index c75fdae17..586c1b285 100644 --- a/posts/42174.html +++ b/posts/42174.html @@ -1,4 +1,4 @@ -解析ini文件用于数据驱动 | GGLSS

解析ini文件用于数据驱动

背景

  • PO设计模式是selenum自动化测试中比较好的设计模式
  • 在项目的开发过程中,UI界面上的元素不确定,会经常变化

过程解析

  • 在PyCharm创建ini文件
  • 创建一个可以解析ini文件的python模块(parse_ini)
  • 其他模块引用parse_ini文件里面的方法把ini文件解析出来

创建ini文件

image

创建parse_ini模块

import configparser
+解析ini文件用于数据驱动 | GGLSS

解析ini文件用于数据驱动

背景

  • PO设计模式是selenum自动化测试中比较好的设计模式
  • 在项目的开发过程中,UI界面上的元素不确定,会经常变化

过程解析

  • 在PyCharm创建ini文件
  • 创建一个可以解析ini文件的python模块(parse_ini)
  • 其他模块引用parse_ini文件里面的方法把ini文件解析出来

创建ini文件

image

创建parse_ini模块

import configparser
 
 class Parse_Ini(object):
 
@@ -36,4 +36,4 @@
 
 if __name__ == "__init__":
     pass
-

举个栗子:

栗子1

image

运行结果:

image

栗子2

image

运行结果:

image

文章作者: gglss
文章链接: http://example.com/posts/42174.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
🍭查看新品🍬
\ No newline at end of file +

举个栗子:

栗子1

image

运行结果:

image

栗子2

image

运行结果:

image

文章作者: gglss
文章链接: http://example.com/posts/42174.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/42395.html b/posts/42395.html index 5e9603deb..292764665 100644 --- a/posts/42395.html +++ b/posts/42395.html @@ -1 +1 @@ -本地镜像发布到私有库 | GGLSS

本地镜像发布到私有库

本地镜像发布到私有库

步骤

  • 下载Docker Registry
1
docker pull registry
  • 运行私有库 Registry,相当于本地有Docker Registry
1
docker run -d -p 5000:5000 -v/ggls/myregistry/:/tmp/registry --privileged=true registry
  • 新启动ubuntu容器,新增ifconfig命令

    • ​ 进入容器中输入apt-get update命令
    • ​ 输入apt-get install net-tools命令
    • xxxxxxxxxx [root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker psCONTAINER ID   IMAGE               COMMAND   CREATED       STATUS       PORTS     NAMES356e32244966   mytest/ubuntu:3.5   “bash”    2 hours ago   Up 2 hours             elated_aryabhata[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m=”vim cmd add ok” -a=”ggls” 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker imagesREPOSITORY     TAG       IMAGE ID       CREATED         SIZEggls/ubuntu     1.5       87e99e19eeef   7 seconds ago   176MBmytest/ubuntu   3.5       a92a27affdde   2 hours ago     72.8MBtomcat          9.0       b8e65a4d736d   4 months ago   680MBubuntu         latest   ba6acccedd29   6 months ago    72.8MBredis           6.0.8     16ecd2772934   18 months ago   104MB[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell
  • 容器外部执行docker commit -m="ifconfig cmd add" -a="ggls" ffcc5edf5071 ubuntu:1.6命令

  • curl验证私服库上有什么镜像

1
curl -XGET http://8.142.144.75:5000/v2/_catalog
  • 将新镜像修改为符合私服库格式的镜像
1
2
3
docker tag 镜像:Tag Host:Port/Repository:Tag
#
docker tag ubuntu:1.6 8.142.144.75:5000/ubuntu:1.3
  • 修改配置文件使之支持http

    docker 默认不允许http方式推送镜像,通过此配置取消这个限制,若不生效,重启docker

    • 使用命令vim /etc/docker/daemon.json打开配置文件
    • 在阿里云加速后面新增一个json
    1
    2
    3
    4
    {
    "registry-mirrors": ["https://qp747t9w.mirror.aliyuncs.com"],
    "insecure-registries": ["8.142.144.75:5000"]
    }
    • 重启docker,重启docker私服仓库
  • push推送到私服库

1
docker push 符合私服库格式的镜像名称:tag
  • curl验证私服库上有什么镜像
  • pull到本地并运行
1
docker pull 8.142.144.75:5000/ubuntu:1.6
文章作者: gglss
文章链接: http://example.com/posts/42395.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +本地镜像发布到私有库 | GGLSS

本地镜像发布到私有库

本地镜像发布到私有库

步骤

  • 下载Docker Registry
1
docker pull registry
  • 运行私有库 Registry,相当于本地有Docker Registry
1
docker run -d -p 5000:5000 -v/ggls/myregistry/:/tmp/registry --privileged=true registry
  • 新启动ubuntu容器,新增ifconfig命令

    • ​ 进入容器中输入apt-get update命令
    • ​ 输入apt-get install net-tools命令
    • xxxxxxxxxx [root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker psCONTAINER ID   IMAGE               COMMAND   CREATED       STATUS       PORTS     NAMES356e32244966   mytest/ubuntu:3.5   “bash”    2 hours ago   Up 2 hours             elated_aryabhata[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m=”vim cmd add ok” -a=”ggls” 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker imagesREPOSITORY     TAG       IMAGE ID       CREATED         SIZEggls/ubuntu     1.5       87e99e19eeef   7 seconds ago   176MBmytest/ubuntu   3.5       a92a27affdde   2 hours ago     72.8MBtomcat          9.0       b8e65a4d736d   4 months ago   680MBubuntu         latest   ba6acccedd29   6 months ago    72.8MBredis           6.0.8     16ecd2772934   18 months ago   104MB[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell
  • 容器外部执行docker commit -m="ifconfig cmd add" -a="ggls" ffcc5edf5071 ubuntu:1.6命令

  • curl验证私服库上有什么镜像

1
curl -XGET http://8.142.144.75:5000/v2/_catalog
  • 将新镜像修改为符合私服库格式的镜像
1
2
3
docker tag 镜像:Tag Host:Port/Repository:Tag
#
docker tag ubuntu:1.6 8.142.144.75:5000/ubuntu:1.3
  • 修改配置文件使之支持http

    docker 默认不允许http方式推送镜像,通过此配置取消这个限制,若不生效,重启docker

    • 使用命令vim /etc/docker/daemon.json打开配置文件
    • 在阿里云加速后面新增一个json
    1
    2
    3
    4
    {
    "registry-mirrors": ["https://qp747t9w.mirror.aliyuncs.com"],
    "insecure-registries": ["8.142.144.75:5000"]
    }
    • 重启docker,重启docker私服仓库
  • push推送到私服库

1
docker push 符合私服库格式的镜像名称:tag
  • curl验证私服库上有什么镜像
  • pull到本地并运行
1
docker pull 8.142.144.75:5000/ubuntu:1.6
文章作者: gglss
文章链接: http://example.com/posts/42395.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/42656.html b/posts/42656.html index 56ea8f14d..400316c5c 100644 --- a/posts/42656.html +++ b/posts/42656.html @@ -1 +1 @@ -_mysql主从复制docker版 | GGLSS

_mysql主从复制docker版

_mysql主从复制docker版

安装mysql主从复制(一主一从)

新建主服务器容器实例3307

1
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log/:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

进入/mydata/mysql-master/conf目录下新建my.cnf把下面内容粘贴到my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

修改完配置后重启master容器

master容器实例内创建数据同步用户

1
2
3
4
# 建立一个用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 对新建的用户进行授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

新建从服务器实例3308

1
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log/:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

进入/mydata/mysql-slave/conf目录下新建my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1

重启从机实例docker restart mysql-slave

在主数据库中查看主从同步状态show master status;

进入mysql-slave从机容器

在从数据库中配置主从复制change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

1
2
3
4
5
6
7
8
# 说明:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

在从数据库中查看主从同步状态show slave status \G;

在从数据库中开启主从同步start slave

查看从数据库状态发现已经同步

主从复制测试

主机创建数据库,创建表,插入数据,搜索表的数据

从机直接搜索标的数据

文章作者: gglss
文章链接: http://example.com/posts/42656.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +_mysql主从复制docker版 | GGLSS

_mysql主从复制docker版

_mysql主从复制docker版

安装mysql主从复制(一主一从)

新建主服务器容器实例3307

1
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log/:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

进入/mydata/mysql-master/conf目录下新建my.cnf把下面内容粘贴到my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

修改完配置后重启master容器

master容器实例内创建数据同步用户

1
2
3
4
# 建立一个用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 对新建的用户进行授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

新建从服务器实例3308

1
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log/:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

进入/mydata/mysql-slave/conf目录下新建my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1

重启从机实例docker restart mysql-slave

在主数据库中查看主从同步状态show master status;

进入mysql-slave从机容器

在从数据库中配置主从复制change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

1
2
3
4
5
6
7
8
# 说明:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

在从数据库中查看主从同步状态show slave status \G;

在从数据库中开启主从同步start slave

查看从数据库状态发现已经同步

主从复制测试

主机创建数据库,创建表,插入数据,搜索表的数据

从机直接搜索标的数据

文章作者: gglss
文章链接: http://example.com/posts/42656.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/43612.html b/posts/43612.html index 64902ee76..6181c69e1 100644 --- a/posts/43612.html +++ b/posts/43612.html @@ -1 +1 @@ -关闭chrome浏览器自动更新 | GGLSS

关闭chrome浏览器自动更新

屏蔽谷歌的更新服务器

1
修改 "C:\Windows\System32\drivers\etc\host 文件,在最后增加

修改C:\Windows\System32\drivers\etc\hosts文件,在最后增加

1
127.0.0.1 update.googleapis.com

保存后win+r,输入CMD,输入ipconfig /flushdns刷新DNS

然后重启浏览器

文章作者: gglss
文章链接: http://example.com/posts/43612.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +关闭chrome浏览器自动更新 | GGLSS

关闭chrome浏览器自动更新

屏蔽谷歌的更新服务器

1
修改 "C:\Windows\System32\drivers\etc\host 文件,在最后增加

修改C:\Windows\System32\drivers\etc\hosts文件,在最后增加

1
127.0.0.1 update.googleapis.com

保存后win+r,输入CMD,输入ipconfig /flushdns刷新DNS

然后重启浏览器

文章作者: gglss
文章链接: http://example.com/posts/43612.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/43613.html b/posts/43613.html index a0515f8dc..2f5e31420 100644 --- a/posts/43613.html +++ b/posts/43613.html @@ -1 +1 @@ -自动化基础之Xpath定位 | GGLSS

自动化基础之Xpath定位

常用函数定位
定位函数position
//*contains(text(),’文字’)/li[position()=3]找到第三个 li
//*contains(text(),’文字’)/li[position()<=2]找到前两个 li
Xpath函数进行定位
定位方式描述实例
contains匹配在元素文本中查找包含 ‘文字’ 的元素//*contains(text(),’文字’)
starts-with匹配所有id开头为 ‘s’ 的元素//*[starts-with(@id,’s’)]
ends-with匹配所有id结尾头为 ‘s’ 的元素//*[ends-with(@id,”s”)]
following-sibling匹配和 ‘ul’ 元素同级别的下一个元素//div/following-sibling::ul
preceding-sibling匹配当前节点之前的所有同级节点
ancestor匹配当前节点的所有父级,祖父级还有更高级//div/ancestor::li[@role=”menuitem”]
parent匹配当前节点的父节点,相当于 ..//div/parent::button
文章作者: gglss
文章链接: http://example.com/posts/43613.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +自动化基础之Xpath定位 | GGLSS

自动化基础之Xpath定位

常用函数定位
定位函数position
//*contains(text(),’文字’)/li[position()=3]找到第三个 li
//*contains(text(),’文字’)/li[position()<=2]找到前两个 li
Xpath函数进行定位
定位方式描述实例
contains匹配在元素文本中查找包含 ‘文字’ 的元素//*contains(text(),’文字’)
starts-with匹配所有id开头为 ‘s’ 的元素//*[starts-with(@id,’s’)]
ends-with匹配所有id结尾头为 ‘s’ 的元素//*[ends-with(@id,”s”)]
following-sibling匹配和 ‘ul’ 元素同级别的下一个元素//div/following-sibling::ul
preceding-sibling匹配当前节点之前的所有同级节点
ancestor匹配当前节点的所有父级,祖父级还有更高级//div/ancestor::li[@role=”menuitem”]
parent匹配当前节点的父节点,相当于 ..//div/parent::button
文章作者: gglss
文章链接: http://example.com/posts/43613.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/44160.html b/posts/44160.html index 64eaf7ff9..b8ecdbd74 100644 --- a/posts/44160.html +++ b/posts/44160.html @@ -1 +1 @@ -english one | GGLSS

english one

记录的目的

想学习英语,目前的一个目标也可能是因为考研吧,在学校的时候专升本考试真是没有重视,导致面临了这个一个尴尬的局面(当时考虑的是学历不重要,结果刚出学校社会就给出一个巴掌),还是要有一个学历,英语在工作中也是要使用的,加油!

学习进程

目前在使用不背单词软件背单词,但是心里总想偷懒,特意做记录一下,学习长难句也会在这个博客上进行记录

原文

Curbs on business-method claims would be a dramatic about-face, because it was the

Federal Circuit itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

【2010英语一Text2】

分析过程

  1. 找动词
  2. 划分主从句
  3. 进行翻译

curb:控制

about-face (about turn):重大转变

business-method:商业方法

claim:声称、要求拥有

dramatic:戏剧化的、喜剧的

patent:专利,专利权

circuit:环行、电路、巡回

文章作者: gglss
文章链接: http://example.com/posts/44160.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +english one | GGLSS

english one

记录的目的

想学习英语,目前的一个目标也可能是因为考研吧,在学校的时候专升本考试真是没有重视,导致面临了这个一个尴尬的局面(当时考虑的是学历不重要,结果刚出学校社会就给出一个巴掌),还是要有一个学历,英语在工作中也是要使用的,加油!

学习进程

目前在使用不背单词软件背单词,但是心里总想偷懒,特意做记录一下,学习长难句也会在这个博客上进行记录

原文

Curbs on business-method claims would be a dramatic about-face, because it was the

Federal Circuit itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

【2010英语一Text2】

分析过程

  1. 找动词
  2. 划分主从句
  3. 进行翻译

curb:控制

about-face (about turn):重大转变

business-method:商业方法

claim:声称、要求拥有

dramatic:戏剧化的、喜剧的

patent:专利,专利权

circuit:环行、电路、巡回

文章作者: gglss
文章链接: http://example.com/posts/44160.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/4654.html b/posts/4654.html index 7be3c15fe..1286976a0 100644 --- a/posts/4654.html +++ b/posts/4654.html @@ -1 +1 @@ -Shell变量 | GGLSS

Shell变量

shell变量分为系统变量和自定义变量,变量默认字符串类型

系统变量

$HOME 获取当前用户的家目录

$PWD 获取当前目录的路径

$SHELL 获取shell的执行引擎

$USER 获取当前用户的名称

自定义变量

在linux系统中定义变量A=1,等号两边不能有空格,使用echo $A显示A的值

使用unset A命令,撤销变量

定义只读变量readonly b=3,使用echo $b显示b的值,不能unset

export命令进行设置全局变量,可以让其他shell命令进行使用

特殊变量:**$n**

定义

n表示数字,范围是09,$0表示脚本名称,$19表示1~9个参数,10以上的参数要用花括号包裹,如${10}

运行apple.sh文件时可以传递参数

举个栗子

1
2
3
4
5
6
7
8
#!/bin/bash
#
echo "filename:" $0
echo "filename_1:" $1
echo "filename_2:" $2
echo "filename_3:" $3
echo "filename_4:" $4
echo "filename_5:" $5

运行后传递参数bash apple.sh 001 002 test "test sss" "hsgd_dee"

特殊变量:$#

定义

获取所有输入参数的个数,常用于循环

举个栗子

1
2
3
4
5
6
7
8
#!/bin/bash
#
echo "filename:" $0
echo "filename_1:" $1
echo "filename_2:" $2
echo "filename_3:" $3
#
echo $#
特殊变量:$#,$*

定义

$*代表命令行中所有参数,把参数作为一个整体

$@代表命令行中所有参数,把参数区分对待

特殊变量:$?

定义

最后一次命令的返回状态,如果返回变量的值为0,则表示最后一次命令执行正确,如果变量的值非0,则证明上一条变量返回不正确

举个栗子

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# $?
bash: 0: command not found
[root@b09ed0cc2c9d opt]# echo $?
127
[root@b09ed0cc2c9d opt]# echo $?
0
[root@b09ed0cc2c9d opt]#
文章作者: gglss
文章链接: http://example.com/posts/4654.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell变量 | GGLSS

Shell变量

shell变量分为系统变量和自定义变量,变量默认字符串类型

系统变量

$HOME 获取当前用户的家目录

$PWD 获取当前目录的路径

$SHELL 获取shell的执行引擎

$USER 获取当前用户的名称

自定义变量

在linux系统中定义变量A=1,等号两边不能有空格,使用echo $A显示A的值

使用unset A命令,撤销变量

定义只读变量readonly b=3,使用echo $b显示b的值,不能unset

export命令进行设置全局变量,可以让其他shell命令进行使用

特殊变量:**$n**

定义

n表示数字,范围是09,$0表示脚本名称,$19表示1~9个参数,10以上的参数要用花括号包裹,如${10}

运行apple.sh文件时可以传递参数

举个栗子

1
2
3
4
5
6
7
8
#!/bin/bash
#
echo "filename:" $0
echo "filename_1:" $1
echo "filename_2:" $2
echo "filename_3:" $3
echo "filename_4:" $4
echo "filename_5:" $5

运行后传递参数bash apple.sh 001 002 test "test sss" "hsgd_dee"

特殊变量:$#

定义

获取所有输入参数的个数,常用于循环

举个栗子

1
2
3
4
5
6
7
8
#!/bin/bash
#
echo "filename:" $0
echo "filename_1:" $1
echo "filename_2:" $2
echo "filename_3:" $3
#
echo $#
特殊变量:$#,$*

定义

$*代表命令行中所有参数,把参数作为一个整体

$@代表命令行中所有参数,把参数区分对待

特殊变量:$?

定义

最后一次命令的返回状态,如果返回变量的值为0,则表示最后一次命令执行正确,如果变量的值非0,则证明上一条变量返回不正确

举个栗子

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# $?
bash: 0: command not found
[root@b09ed0cc2c9d opt]# echo $?
127
[root@b09ed0cc2c9d opt]# echo $?
0
[root@b09ed0cc2c9d opt]#
文章作者: gglss
文章链接: http://example.com/posts/4654.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/47564.html b/posts/47564.html index fcf670895..cf329f244 100644 --- a/posts/47564.html +++ b/posts/47564.html @@ -1 +1 @@ -字符串 | GGLSS

字符串

字符串的方法

方法描述
str.concat()将参数拼接到字符串上
trim()去除字符串两端的字符串,不能去除中间
replace(oldChar, newChar)将字符串的old参数替换为new参数
length()返回此字符串的长度
isEmpty()判断字符串是否为空

concat()方法

  • 返回字符串类型
  • 字符串在后面拼接
    1
    2
    3
    String str = "床前明月光";
    String str1 = str.concat("疑是地上霜。");
    System.out.println(str1);

trim()方法

1
2
3
String str = "    床  前明   月光   ";
String str1 = str.trim();
System.out.println(str1);

replace(oldChar, newChar)方法

1
2
3
String str = "床前明月光";
String str1 = str.replace("床", "llll");
System.out.println(str1);

length()方法

  • 返回int类型
    1
    2
    3
    String str = "床前明月光";
    int str1 = str.length();
    System.out.println(str1);

isEmpty()方法

  • 返回布尔类型
    1
    2
    3
    String str = "床前明月光";
    boolean str1 = str.isEmpty();
    System.out.println(str1);
文章作者: gglss
文章链接: http://example.com/posts/47564.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +字符串 | GGLSS

字符串

字符串的方法

方法描述
str.concat()将参数拼接到字符串上
trim()去除字符串两端的字符串,不能去除中间
replace(oldChar, newChar)将字符串的old参数替换为new参数
length()返回此字符串的长度
isEmpty()判断字符串是否为空

concat()方法

  • 返回字符串类型
  • 字符串在后面拼接
    1
    2
    3
    String str = "床前明月光";
    String str1 = str.concat("疑是地上霜。");
    System.out.println(str1);

trim()方法

1
2
3
String str = "    床  前明   月光   ";
String str1 = str.trim();
System.out.println(str1);

replace(oldChar, newChar)方法

1
2
3
String str = "床前明月光";
String str1 = str.replace("床", "llll");
System.out.println(str1);

length()方法

  • 返回int类型
    1
    2
    3
    String str = "床前明月光";
    int str1 = str.length();
    System.out.println(str1);

isEmpty()方法

  • 返回布尔类型
    1
    2
    3
    String str = "床前明月光";
    boolean str1 = str.isEmpty();
    System.out.println(str1);
文章作者: gglss
文章链接: http://example.com/posts/47564.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/4851.html b/posts/4851.html index 8c58eaa93..154be925b 100644 --- a/posts/4851.html +++ b/posts/4851.html @@ -1 +1 @@ -使用pip install报错的解决办法 | GGLSS

使用pip install报错的解决办法

报错提示

今天使用PyCharm下载一个模块pip.exe install locust,有错误提示

1
2
3
4
5
6
7
8
9
10
11
https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
// 报错位置
ERROR: Failed building wheel for psutil

ERROR: Could not build wheels for psutil, which is required to install pyproject.toml-based projects
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)

原因

缺少对应的whl文件

解决办法

碰到了这个错误ERROR: Failed building wheel for psutil,就需要下载psutil.whl

下载网站点击进入网站

下载psutil-5.9.0-cp38-cp38-win_amd64.whl文件

然后使用(pip install 文件的绝对路径)进行安装,然后使用pip.exe install locust正常安装

1
2
3
4
5

pip.exe install D:\Appium\psutil-5.9.0-cp38-cp38-win_amd64.whl

pip.exe install locust

文章作者: gglss
文章链接: http://example.com/posts/4851.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用pip install报错的解决办法 | GGLSS

使用pip install报错的解决办法

报错提示

今天使用PyCharm下载一个模块pip.exe install locust,有错误提示

1
2
3
4
5
6
7
8
9
10
11
https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
// 报错位置
ERROR: Failed building wheel for psutil

ERROR: Could not build wheels for psutil, which is required to install pyproject.toml-based projects
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)

原因

缺少对应的whl文件

解决办法

碰到了这个错误ERROR: Failed building wheel for psutil,就需要下载psutil.whl

下载网站点击进入网站

下载psutil-5.9.0-cp38-cp38-win_amd64.whl文件

然后使用(pip install 文件的绝对路径)进行安装,然后使用pip.exe install locust正常安装

1
2
3
4
5

pip.exe install D:\Appium\psutil-5.9.0-cp38-cp38-win_amd64.whl

pip.exe install locust

文章作者: gglss
文章链接: http://example.com/posts/4851.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/48851.html b/posts/48851.html index 397964e25..41edde845 100644 --- a/posts/48851.html +++ b/posts/48851.html @@ -1 +1 @@ -Constant Throughput Timer定时器 | GGLSS

Constant Throughput Timer定时器

作用

限制整个运行过程中的生成的吞吐量不要超过某一个值,防止压死系统

参数

  • Target throughput(in samples per minute):目标吞吐量,指的是每分钟发送的请求数,对应测试要求的20 QPS,这里应该输入1200
  • Calculate Throughput based on:有5个选项
    • This Thread only:控制每个线程的吞吐量,这个模式的作用是:总的吞吐量=Target throughput * 线程的数量
    • All active threads:设置的Target throughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理时间后再次运行。活跃线程指的是同一时刻同时运行的线程
    • All active threads in current thread group:设置的`Target throughput将分配在当前线程祖的每一个活跃线程上,当测试计划只有一个线程组,这个模式作用和All active threads一样
    • All active threads(shared):与All active threads选项基本一致,唯一区别是,每一个活跃线程都会在所有活跃线程上一次运行结束后等待合理时间再次运行
    • All active threads in current thread group(shared):与All active threads in current thread group选项基本一致,唯一区别是,每个活跃线程都会在所有活跃线程的上一次运行结束等待合理的时间后再次运行
文章作者: gglss
文章链接: http://example.com/posts/48851.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Constant Throughput Timer定时器 | GGLSS

Constant Throughput Timer定时器

作用

限制整个运行过程中的生成的吞吐量不要超过某一个值,防止压死系统

参数

  • Target throughput(in samples per minute):目标吞吐量,指的是每分钟发送的请求数,对应测试要求的20 QPS,这里应该输入1200
  • Calculate Throughput based on:有5个选项
    • This Thread only:控制每个线程的吞吐量,这个模式的作用是:总的吞吐量=Target throughput * 线程的数量
    • All active threads:设置的Target throughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理时间后再次运行。活跃线程指的是同一时刻同时运行的线程
    • All active threads in current thread group:设置的`Target throughput将分配在当前线程祖的每一个活跃线程上,当测试计划只有一个线程组,这个模式作用和All active threads一样
    • All active threads(shared):与All active threads选项基本一致,唯一区别是,每一个活跃线程都会在所有活跃线程上一次运行结束后等待合理时间再次运行
    • All active threads in current thread group(shared):与All active threads in current thread group选项基本一致,唯一区别是,每个活跃线程都会在所有活跃线程的上一次运行结束等待合理的时间后再次运行
文章作者: gglss
文章链接: http://example.com/posts/48851.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/48990.html b/posts/48990.html index f4a996732..c7ea4c86d 100644 --- a/posts/48990.html +++ b/posts/48990.html @@ -1 +1 @@ -循环控制器Loop Controller | GGLSS

循环控制器Loop Controller

作用

指定子节点运行的次数,使用变量或数值进行控制

  • Infinite:表示一直循环
  • 如果同时设置线程组循环次数和循环控制器的循环次数,那控制器子节点运行的次数为两个数值相乘的结果

添加

文章作者: gglss
文章链接: http://example.com/posts/48990.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +循环控制器Loop Controller | GGLSS

循环控制器Loop Controller

作用

指定子节点运行的次数,使用变量或数值进行控制

  • Infinite:表示一直循环
  • 如果同时设置线程组循环次数和循环控制器的循环次数,那控制器子节点运行的次数为两个数值相乘的结果

添加

文章作者: gglss
文章链接: http://example.com/posts/48990.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/49262.html b/posts/49262.html index d04de8f28..fc916a6a6 100644 --- a/posts/49262.html +++ b/posts/49262.html @@ -1 +1 @@ -Jmeter之全局参数设置和csv数据导入 | GGLSS

Jmeter之全局参数设置和csv数据导入

全局参数设置

添加组件
  • 右键Thread Group
  • 点击Add -> Config Element -> User Defined Variables
添加对应的变量
  • hostname:localhost
  • port:9090
  • protocol:http

然后再请求参数中使用对应的参数变量名

  • ${hostname}
  • ${port}
  • ${protocol}

csv数据导入

创建csv文件
  • 使用Excel创建csv文件
  • csv数据之间使用英文逗号来分割
  • 保存成.csv文件
添加csv导入组件
  • 右键Thread Group
  • 点击Add -> Config Element -> CSV Data Set Config
配置
  • Filename:文件位置
  • File encoding:编码格式
  • Variable Names(comma-delimited):数据参数 如:no,username,password
  • lgnore first lline (only user if Variable Names is not empty):是否忽略第一行(表头)
  • Delimiter(use "\t" for tab):分隔符
  • Allow quoted data?:是否允许双引号括住数据
  • Recycle on EOF?:到了文件结尾是否循环
  • Stop thread on EOF?:到了文件结尾是否停止
  • Sharinng mode:共享模式

注意:把请求的参数修改为:${变量}

文章作者: gglss
文章链接: http://example.com/posts/49262.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Jmeter之全局参数设置和csv数据导入 | GGLSS

Jmeter之全局参数设置和csv数据导入

全局参数设置

添加组件
  • 右键Thread Group
  • 点击Add -> Config Element -> User Defined Variables
添加对应的变量
  • hostname:localhost
  • port:9090
  • protocol:http

然后再请求参数中使用对应的参数变量名

  • ${hostname}
  • ${port}
  • ${protocol}

csv数据导入

创建csv文件
  • 使用Excel创建csv文件
  • csv数据之间使用英文逗号来分割
  • 保存成.csv文件
添加csv导入组件
  • 右键Thread Group
  • 点击Add -> Config Element -> CSV Data Set Config
配置
  • Filename:文件位置
  • File encoding:编码格式
  • Variable Names(comma-delimited):数据参数 如:no,username,password
  • lgnore first lline (only user if Variable Names is not empty):是否忽略第一行(表头)
  • Delimiter(use "\t" for tab):分隔符
  • Allow quoted data?:是否允许双引号括住数据
  • Recycle on EOF?:到了文件结尾是否循环
  • Stop thread on EOF?:到了文件结尾是否停止
  • Sharinng mode:共享模式

注意:把请求的参数修改为:${变量}

文章作者: gglss
文章链接: http://example.com/posts/49262.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/50013.html b/posts/50013.html index a4ad33751..ed5fe91f3 100644 --- a/posts/50013.html +++ b/posts/50013.html @@ -1 +1 @@ -Shell条件判断 | GGLSS

Shell条件判断

基本语法

[ condition ] (注意,condition 前后要有空格

注意:条件非空即为 true,[ atguigu ]返回 true, [] 返回 false.

常用条件判断
两个整数之间进行比较
1
2
3
4
5
6
7
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

举个栗子

1
2
[23 -lt 80]
echo $? # 判断上一步操作是不是正确
按照文件权限进行判断
1
2
3
-r 读
-w 写
-x 执行

举个栗子

1
2
[ -w 1.sh ]
echo $?
文件类型判断
1
2
3
-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

举个栗子

1
2
[ -e 2.sh ]
echo $?
多条件判断

$$ 与 ,前对,才执行后

||

文章作者: gglss
文章链接: http://example.com/posts/50013.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell条件判断 | GGLSS

Shell条件判断

基本语法

[ condition ] (注意,condition 前后要有空格

注意:条件非空即为 true,[ atguigu ]返回 true, [] 返回 false.

常用条件判断
两个整数之间进行比较
1
2
3
4
5
6
7
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

举个栗子

1
2
[23 -lt 80]
echo $? # 判断上一步操作是不是正确
按照文件权限进行判断
1
2
3
-r 读
-w 写
-x 执行

举个栗子

1
2
[ -w 1.sh ]
echo $?
文件类型判断
1
2
3
-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

举个栗子

1
2
[ -e 2.sh ]
echo $?
多条件判断

$$ 与 ,前对,才执行后

||

文章作者: gglss
文章链接: http://example.com/posts/50013.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/50581.html b/posts/50581.html index 284fd42d1..e3bb8c26f 100644 --- a/posts/50581.html +++ b/posts/50581.html @@ -1 +1 @@ -使用Java解析Properties文件 | GGLSS

使用Java解析Properties文件

主要函数

文件后缀函数方法
.Propertiesload加载文件
setProperty设置
getProperty获取

编写逻辑

创建加载文件的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 加载文件
* @return Properties 对象
* @throws IOException I/O输入异常
*/
private Properties readProperties() throws IOException{
// 实例化,创建 Properties 对象
Properties properties = new Properties();
try {
// 创建文件输入对象 FileInputStream("testpro.properties")
InputStream inputStream = new FileInputStream(filepath);
// 把文件输入对象放入缓存输入对象 new BufferedInputStream 里面
BufferedInputStream in = new BufferedInputStream(inputStream);
// 加载文件 in = ParseProperties.class.getResourceAsStream("testpro.properties"),自动获取 resources 文件夹下路径
properties.load(in);
}catch (IOException e){
e.printStackTrace();
}
return properties;
}

获取key后面的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 获取数据
* @param key 数据名称
* @return 数据等号右边的值
* @throws Exception 异常
*/
public String getPro(String key) throws Exception {
// 判断文件里面有没有这个 Key
if (prop.containsKey(key)) {
// 获得key后面的value值
return prop.getProperty(key);
}else {
System.out.println("你获取的key值不对");
return "";
}
}

获取定位类型或者定位表达式

1
2
3
4
5
6
7
8
9
/**
* 返回定位类型或者定位表达式
* @param key 数据名称
* @param num 输入0/1
* @return num=0时,返回定位类型,num=1时,返回定位表达式
*/
public String get_pro_element(String key, int num){
return (num!=0 & num!=1) ? "num:参数输入错误" : prop.getProperty(key).split("->")[num];
}
文章作者: gglss
文章链接: http://example.com/posts/50581.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用Java解析Properties文件 | GGLSS

使用Java解析Properties文件

主要函数

文件后缀函数方法
.Propertiesload加载文件
setProperty设置
getProperty获取

编写逻辑

创建加载文件的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 加载文件
* @return Properties 对象
* @throws IOException I/O输入异常
*/
private Properties readProperties() throws IOException{
// 实例化,创建 Properties 对象
Properties properties = new Properties();
try {
// 创建文件输入对象 FileInputStream("testpro.properties")
InputStream inputStream = new FileInputStream(filepath);
// 把文件输入对象放入缓存输入对象 new BufferedInputStream 里面
BufferedInputStream in = new BufferedInputStream(inputStream);
// 加载文件 in = ParseProperties.class.getResourceAsStream("testpro.properties"),自动获取 resources 文件夹下路径
properties.load(in);
}catch (IOException e){
e.printStackTrace();
}
return properties;
}

获取key后面的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 获取数据
* @param key 数据名称
* @return 数据等号右边的值
* @throws Exception 异常
*/
public String getPro(String key) throws Exception {
// 判断文件里面有没有这个 Key
if (prop.containsKey(key)) {
// 获得key后面的value值
return prop.getProperty(key);
}else {
System.out.println("你获取的key值不对");
return "";
}
}

获取定位类型或者定位表达式

1
2
3
4
5
6
7
8
9
/**
* 返回定位类型或者定位表达式
* @param key 数据名称
* @param num 输入0/1
* @return num=0时,返回定位类型,num=1时,返回定位表达式
*/
public String get_pro_element(String key, int num){
return (num!=0 & num!=1) ? "num:参数输入错误" : prop.getProperty(key).split("->")[num];
}
文章作者: gglss
文章链接: http://example.com/posts/50581.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/50699.html b/posts/50699.html index 707f17681..529104d48 100644 --- a/posts/50699.html +++ b/posts/50699.html @@ -1 +1 @@ -使用docker安装常用软件:tomcat | GGLSS

使用docker安装常用软件:tomcat

使用docker安装常用软件:tomcat

安装流程

首先把tomcat在镜像源中pull下来,使用docker images 查看镜像

使用docker run -d -p 8080:8080 tomcat:9.0 新建容器运行tomcat

运行后使用本地PC使用阿里云的ip和端口访问docker上面的tomcat

这是什么原因呢

使用docker ps查询到容器编号,docker exec -it 容器编号 bash 打开容器

1
2
3
4
5
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c52ab6b8b8df b8e65a4d736d "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp inspiring_bohr
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker exec -it c52ab6b8b8df bash
root@c52ab6b8b8df:/usr/local/tomcat#

使用ls-l查看文件列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@c52ab6b8b8df:/usr/local/tomcat# ls -l
total 156
-rw-r--r-- 1 root root 18970 Dec 2 14:30 BUILDING.txt
-rw-r--r-- 1 root root 6210 Dec 2 14:30 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Dec 2 14:30 LICENSE
-rw-r--r-- 1 root root 2333 Dec 2 14:30 NOTICE
-rw-r--r-- 1 root root 3378 Dec 2 14:30 README.md
-rw-r--r-- 1 root root 6898 Dec 2 14:30 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Dec 2 14:30 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 22 17:16 bin
drwxr-xr-x 1 root root 4096 Apr 29 01:48 conf
drwxr-xr-x 2 root root 4096 Dec 22 17:16 lib
drwxrwxrwx 1 root root 4096 Apr 29 01:48 logs
drwxr-xr-x 2 root root 4096 Dec 22 17:16 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 22 17:16 temp
drwxr-xr-x 2 root root 4096 Dec 22 17:16 webapps
drwxr-xr-x 7 root root 4096 Dec 2 14:30 webapps.dist
drwxrwxrwx 2 root root 4096 Dec 2 14:30 work
root@c52ab6b8b8df:/usr/local/tomcat#

从列表可以看到有两个文件夹webappswebapps.dist,数据全部在webapps.dist里面,需要将webapps删除,把webapps.dist重命名成webapps即可访问

使用rm -rf webapps删除webapps文件夹

使用mv webapps.dist webapps 重命名

再次使用本地访问

使用免修改版的tomcat

docker pull billygoo/tomcat8-jdk8

docker run -d -p 8080:8080 –name tomcat8 billygoo/tomcat8-jdk8

文章作者: gglss
文章链接: http://example.com/posts/50699.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用docker安装常用软件:tomcat | GGLSS

使用docker安装常用软件:tomcat

使用docker安装常用软件:tomcat

安装流程

首先把tomcat在镜像源中pull下来,使用docker images 查看镜像

使用docker run -d -p 8080:8080 tomcat:9.0 新建容器运行tomcat

运行后使用本地PC使用阿里云的ip和端口访问docker上面的tomcat

这是什么原因呢

使用docker ps查询到容器编号,docker exec -it 容器编号 bash 打开容器

1
2
3
4
5
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c52ab6b8b8df b8e65a4d736d "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp inspiring_bohr
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker exec -it c52ab6b8b8df bash
root@c52ab6b8b8df:/usr/local/tomcat#

使用ls-l查看文件列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@c52ab6b8b8df:/usr/local/tomcat# ls -l
total 156
-rw-r--r-- 1 root root 18970 Dec 2 14:30 BUILDING.txt
-rw-r--r-- 1 root root 6210 Dec 2 14:30 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Dec 2 14:30 LICENSE
-rw-r--r-- 1 root root 2333 Dec 2 14:30 NOTICE
-rw-r--r-- 1 root root 3378 Dec 2 14:30 README.md
-rw-r--r-- 1 root root 6898 Dec 2 14:30 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Dec 2 14:30 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 22 17:16 bin
drwxr-xr-x 1 root root 4096 Apr 29 01:48 conf
drwxr-xr-x 2 root root 4096 Dec 22 17:16 lib
drwxrwxrwx 1 root root 4096 Apr 29 01:48 logs
drwxr-xr-x 2 root root 4096 Dec 22 17:16 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 22 17:16 temp
drwxr-xr-x 2 root root 4096 Dec 22 17:16 webapps
drwxr-xr-x 7 root root 4096 Dec 2 14:30 webapps.dist
drwxrwxrwx 2 root root 4096 Dec 2 14:30 work
root@c52ab6b8b8df:/usr/local/tomcat#

从列表可以看到有两个文件夹webappswebapps.dist,数据全部在webapps.dist里面,需要将webapps删除,把webapps.dist重命名成webapps即可访问

使用rm -rf webapps删除webapps文件夹

使用mv webapps.dist webapps 重命名

再次使用本地访问

使用免修改版的tomcat

docker pull billygoo/tomcat8-jdk8

docker run -d -p 8080:8080 –name tomcat8 billygoo/tomcat8-jdk8

文章作者: gglss
文章链接: http://example.com/posts/50699.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/51796.html b/posts/51796.html index 706dd84f0..a03a6b606 100644 --- a/posts/51796.html +++ b/posts/51796.html @@ -1 +1 @@ -redis的3主3从扩容 | GGLSS

redis的3主3从扩容

redis的3主3从扩容

首先添加两个redis

1
2
3
4
# 创建redis-node-7
docler run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
# 创建redis-node-8
docler run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

注:在阿里云的安全组和防火墙上添加6387,16387 6388,16388四个端口

配置步骤:

执行docker exec -it redis-node-1 bash 进入redis-node-1里面
执行redis-cli --cluster add-node 8.142.144.75:6387 8.142.144.75:6381

6387 新加入的节点

6381 相当于6387的领路人

使用redis-cli --cluster check 8.142.144.75:6381检查
重新分配槽号

redis-cli –cluster reshard IP地址:端口号

注:上图的1指的是:对主机数平分16384个节点,16384/主机数(包含想要添加的主机)

注:上图的2指的是:新加入的6387节点的ID

all:表示全部进行重新分配

在重新加载过程会碰到Do you want to proceed with the proposed reshard plan (yes/no)?一句话,选择yes就可以

检查集群情况
为主节点6387分配从节点6388

redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID

检查集群情况
文章作者: gglss
文章链接: http://example.com/posts/51796.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +redis的3主3从扩容 | GGLSS

redis的3主3从扩容

redis的3主3从扩容

首先添加两个redis

1
2
3
4
# 创建redis-node-7
docler run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
# 创建redis-node-8
docler run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

注:在阿里云的安全组和防火墙上添加6387,16387 6388,16388四个端口

配置步骤:

执行docker exec -it redis-node-1 bash 进入redis-node-1里面
执行redis-cli --cluster add-node 8.142.144.75:6387 8.142.144.75:6381

6387 新加入的节点

6381 相当于6387的领路人

使用redis-cli --cluster check 8.142.144.75:6381检查
重新分配槽号

redis-cli –cluster reshard IP地址:端口号

注:上图的1指的是:对主机数平分16384个节点,16384/主机数(包含想要添加的主机)

注:上图的2指的是:新加入的6387节点的ID

all:表示全部进行重新分配

在重新加载过程会碰到Do you want to proceed with the proposed reshard plan (yes/no)?一句话,选择yes就可以

检查集群情况
为主节点6387分配从节点6388

redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID

检查集群情况
文章作者: gglss
文章链接: http://example.com/posts/51796.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/527.html b/posts/527.html index 40dffbc5f..e10c8a11c 100644 --- a/posts/527.html +++ b/posts/527.html @@ -1 +1 @@ -Constant Timer定时器 | GGLSS

Constant Timer定时器

作用

就是loadrunner上面的思考时间,就是模拟真实用户操作过程的等待时间

生效范围

定时器的父节点和子节点,如果想让一个请求强制停止一段时间,就把定时器放在这个请求的下面

单位是以ms为单位,1s=1000ms

文章作者: gglss
文章链接: http://example.com/posts/527.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Constant Timer定时器 | GGLSS

Constant Timer定时器

作用

就是loadrunner上面的思考时间,就是模拟真实用户操作过程的等待时间

生效范围

定时器的父节点和子节点,如果想让一个请求强制停止一段时间,就把定时器放在这个请求的下面

单位是以ms为单位,1s=1000ms

文章作者: gglss
文章链接: http://example.com/posts/527.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/52845.html b/posts/52845.html index 7c39b920b..c46570bcc 100644 --- a/posts/52845.html +++ b/posts/52845.html @@ -1 +1 @@ -使用jmeter录制压测 | GGLSS

使用jmeter录制压测

业务

  • 压测对象:http://news.baidu.com
  • 压测页面:首页、国际频道、财经频道
  • 步骤
    • 访问首页
    • 单击“国际”(频道)
    • 单击“财经”(频道)
  • 操作手段:录制回放

操作步骤

  • 添加录制器“HTTP(S) Test Script Recorder”

    • 右键Test Plan,点击add
    • 点击Non-Test Elements
    • 点击HTTP(S) Test Script Recorder
  • 添加线程组“Thread Group”

  • 添加录制控制器“Recording Controller”,

    • 右键线程组,点击and
    • 点击Logic Controller
    • 点击Recording Controller
  • 录制脚本的配置(Test Plan Creation)

    • Port=8088
    • Target Controller = TestPlan > Tread Group > Recording Controller
    • 其他的配置保持默认
  • 录制脚本的配置(Requests Filtering 请求过滤器)

    • URl Patterns to Include上添加正则.*\.(baidu\.com).*;表示只抓取百度URL的内容,不抓取其他网站的
    • URl Patterns to Exclude上添加正则.*\.(js|css|PNG|jpg|jpeg|ico|png|gif).*;去掉一些静态请求
    • 目的是:避免录制过多没必要的请求
  • 单击保存按钮,将Jmeter脚本存储

  • 打开浏览器,设置代理,将浏览器的代理服务地址指向http://localhost:8088,然后就可以进行访问录制了

  • 访问百度新闻的首页、国际、财经页面

  • 查看jmeter,录制结果在Recording Controller下面看到,然后停止录制

校验

录制结束后,要对录制的代码进行校验

  • 添加查看结果树组件

运行录制的代码,在查看结果树上查看运行的结果

文章作者: gglss
文章链接: http://example.com/posts/52845.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用jmeter录制压测 | GGLSS

使用jmeter录制压测

业务

  • 压测对象:http://news.baidu.com
  • 压测页面:首页、国际频道、财经频道
  • 步骤
    • 访问首页
    • 单击“国际”(频道)
    • 单击“财经”(频道)
  • 操作手段:录制回放

操作步骤

  • 添加录制器“HTTP(S) Test Script Recorder”

    • 右键Test Plan,点击add
    • 点击Non-Test Elements
    • 点击HTTP(S) Test Script Recorder
  • 添加线程组“Thread Group”

  • 添加录制控制器“Recording Controller”,

    • 右键线程组,点击and
    • 点击Logic Controller
    • 点击Recording Controller
  • 录制脚本的配置(Test Plan Creation)

    • Port=8088
    • Target Controller = TestPlan > Tread Group > Recording Controller
    • 其他的配置保持默认
  • 录制脚本的配置(Requests Filtering 请求过滤器)

    • URl Patterns to Include上添加正则.*\.(baidu\.com).*;表示只抓取百度URL的内容,不抓取其他网站的
    • URl Patterns to Exclude上添加正则.*\.(js|css|PNG|jpg|jpeg|ico|png|gif).*;去掉一些静态请求
    • 目的是:避免录制过多没必要的请求
  • 单击保存按钮,将Jmeter脚本存储

  • 打开浏览器,设置代理,将浏览器的代理服务地址指向http://localhost:8088,然后就可以进行访问录制了

  • 访问百度新闻的首页、国际、财经页面

  • 查看jmeter,录制结果在Recording Controller下面看到,然后停止录制

校验

录制结束后,要对录制的代码进行校验

  • 添加查看结果树组件

运行录制的代码,在查看结果树上查看运行的结果

文章作者: gglss
文章链接: http://example.com/posts/52845.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/53299.html b/posts/53299.html index a5c66e77c..40d9abc27 100644 --- a/posts/53299.html +++ b/posts/53299.html @@ -1 +1 @@ -_3主3从的`Redis集群`搭建之哈希槽算法 | GGLSS

_3主3从的`Redis集群`搭建之哈希槽算法

_3主3从的Redis集群搭建之哈希槽算法

目的

解决一致性哈希算法数据倾斜问题

实质

是一个数组,数组[0,2^14-1]形成hash slot空间

作用

解决均匀分配问题,在数据和节点之间加入一层(哈希槽slot)用于管理数据和节点之间的关系,现在相当于节点里放槽,槽里放数据

方便数据移动

哈希解决的映射问题,使用key的哈希值来计算所在的槽,便于数据分配

多少个hash槽

一个集群只能有16384个槽,编号0-16383(0-2^14-1)

这些槽会分配给集群中的所有主节点,分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。

接下来就需要对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。slot = CRC16(key) % 16384

以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。

举个栗子

Redis 集群中内置了 16384 个哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上

首先有几个redis就把0-16383分成几个

文章作者: gglss
文章链接: http://example.com/posts/53299.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +_3主3从的`Redis集群`搭建之哈希槽算法 | GGLSS

_3主3从的`Redis集群`搭建之哈希槽算法

_3主3从的Redis集群搭建之哈希槽算法

目的

解决一致性哈希算法数据倾斜问题

实质

是一个数组,数组[0,2^14-1]形成hash slot空间

作用

解决均匀分配问题,在数据和节点之间加入一层(哈希槽slot)用于管理数据和节点之间的关系,现在相当于节点里放槽,槽里放数据

方便数据移动

哈希解决的映射问题,使用key的哈希值来计算所在的槽,便于数据分配

多少个hash槽

一个集群只能有16384个槽,编号0-16383(0-2^14-1)

这些槽会分配给集群中的所有主节点,分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。

接下来就需要对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。slot = CRC16(key) % 16384

以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。

举个栗子

Redis 集群中内置了 16384 个哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上

首先有几个redis就把0-16383分成几个

文章作者: gglss
文章链接: http://example.com/posts/53299.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/53508.html b/posts/53508.html index fd908fc16..32760c962 100644 --- a/posts/53508.html +++ b/posts/53508.html @@ -1 +1 @@ -docker 帮助启动类命令(二) | GGLSS

docker 帮助启动类命令(二)

docker 帮助启动类命令(二)

docker 开机启动

systemctl enable docker

查看 docker 概要信息

docker info

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
scan: Docker Scan (Docker Inc., v0.12.0)

Server:
Containers: 6
Running: 0
Paused: 0
Stopped: 6
Images: 5
Server Version: 20.10.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1160.45.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.795GiB
Name: iZ8vbfaek3x3ogtpxnpnwfZ
ID: NQOP:KCP6:LS6G:K52A:XOQX:E7FG:FEHL:K3QX:NSLP:VY5S:TFX5:UR42
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://qp747t9w.mirror.aliyuncs.com/
Live Restore Enabled: false

查看 docker 总体帮助文档

docker –help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker --help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST
env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

Management Commands:
app* Docker App (Docker Inc., v0.9.1-beta3)


查看 docker 命令帮助文档
> docker 具体命令 --help

```shell
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps --help

Usage: docker ps [OPTIONS]

List containers

Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display container IDs
-s, --size Display total file sizes
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#

文章作者: gglss
文章链接: http://example.com/posts/53508.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +docker 帮助启动类命令(二) | GGLSS

docker 帮助启动类命令(二)

docker 帮助启动类命令(二)

docker 开机启动

systemctl enable docker

查看 docker 概要信息

docker info

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
scan: Docker Scan (Docker Inc., v0.12.0)

Server:
Containers: 6
Running: 0
Paused: 0
Stopped: 6
Images: 5
Server Version: 20.10.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1160.45.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.795GiB
Name: iZ8vbfaek3x3ogtpxnpnwfZ
ID: NQOP:KCP6:LS6G:K52A:XOQX:E7FG:FEHL:K3QX:NSLP:VY5S:TFX5:UR42
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://qp747t9w.mirror.aliyuncs.com/
Live Restore Enabled: false

查看 docker 总体帮助文档

docker –help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker --help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST
env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

Management Commands:
app* Docker App (Docker Inc., v0.9.1-beta3)


查看 docker 命令帮助文档
> docker 具体命令 --help

```shell
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps --help

Usage: docker ps [OPTIONS]

List containers

Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display container IDs
-s, --size Display total file sizes
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#

文章作者: gglss
文章链接: http://example.com/posts/53508.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/53812.html b/posts/53812.html index b1536954f..783fb4ee0 100644 --- a/posts/53812.html +++ b/posts/53812.html @@ -1 +1 @@ -git提示Timed out的解决办法 | GGLSS

git提示Timed out的解决办法

报错代码

运行git代码会提示Timed out错误

1
使用git,会发生报错:Failed to connect to github.com port 443 after 21098 ms: Timed out

解决办法

设置代理

1
git config --global https.proxy

取消代理

1
git config --global --unset https.proxy

然后输入git 命令使用

文章作者: gglss
文章链接: http://example.com/posts/53812.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +git提示Timed out的解决办法 | GGLSS

git提示Timed out的解决办法

报错代码

运行git代码会提示Timed out错误

1
使用git,会发生报错:Failed to connect to github.com port 443 after 21098 ms: Timed out

解决办法

设置代理

1
git config --global https.proxy

取消代理

1
git config --global --unset https.proxy

然后输入git 命令使用

文章作者: gglss
文章链接: http://example.com/posts/53812.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/546861677.html b/posts/546861677.html index 8950d3b95..88a6f654f 100644 --- a/posts/546861677.html +++ b/posts/546861677.html @@ -1 +1 @@ -上海游玩日记 | GGLSS

上海游玩日记

上个月心血来潮想去上海玩,然后第二天早上七点就坐高铁去上海

刚到上海就在上海闲林街道进行打卡,拍照技术太差,还是审美不好,弄成这种拍照不好的样子,还有那个地方人超级多,拍照的人也很多,转了下就离开了

IMG_1487

在换地方的路上

IMG_1492

晚上天气不太好,去了东方明珠塔,上了顶拍照,可惜晚上灯光太亮,拍不好,上面的玻璃感觉有点脏,白天应该会更好吧

IMG_1515

IMG_1516

IMG_1527

东方塔一层有上海历史变迁的博物馆,从里面可以看到上海近百年的变迁

IMG_1567

IMG_1577

IMG_1578

IMG_1584

IMG_1586

IMG_1587

第二天起来都十点多了,吃了个灌汤包,感觉味道一般,不符合口味,价格很贵

然后去思南公馆去打卡,哪里是许多名人的住所,拍照很好看,文艺气息很浓厚

IMG_1616

IMG_1619

IMG_1623

IMG_1625

IMG_1629

IMG_1633

IMG_1651

IMG_1659

IMG_1660

IMG_1662

IMG_1670

IMG_1676

IMG_1679

IMG_1683

这里就是最后一站,然后就回了杭州了

文章作者: gglss
文章链接: http://example.com/posts/546861677.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +上海游玩日记 | GGLSS

上海游玩日记

上个月心血来潮想去上海玩,然后第二天早上七点就坐高铁去上海

刚到上海就在上海闲林街道进行打卡,拍照技术太差,还是审美不好,弄成这种拍照不好的样子,还有那个地方人超级多,拍照的人也很多,转了下就离开了

IMG_1487

在换地方的路上

IMG_1492

晚上天气不太好,去了东方明珠塔,上了顶拍照,可惜晚上灯光太亮,拍不好,上面的玻璃感觉有点脏,白天应该会更好吧

IMG_1515

IMG_1516

IMG_1527

东方塔一层有上海历史变迁的博物馆,从里面可以看到上海近百年的变迁

IMG_1567

IMG_1577

IMG_1578

IMG_1584

IMG_1586

IMG_1587

第二天起来都十点多了,吃了个灌汤包,感觉味道一般,不符合口味,价格很贵

然后去思南公馆去打卡,哪里是许多名人的住所,拍照很好看,文艺气息很浓厚

IMG_1616

IMG_1619

IMG_1623

IMG_1625

IMG_1629

IMG_1633

IMG_1651

IMG_1659

IMG_1660

IMG_1662

IMG_1670

IMG_1676

IMG_1679

IMG_1683

这里就是最后一站,然后就回了杭州了

文章作者: gglss
文章链接: http://example.com/posts/546861677.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/54899.html b/posts/54899.html index 68e3242fb..4ad7ff871 100644 --- a/posts/54899.html +++ b/posts/54899.html @@ -1 +1 @@ -Butterfly美化记录 | GGLSS

Butterfly美化记录

注:这个魔改转载于Ariasakaの小窝

导航栏

分离菜单栏和搜索栏

让搜索栏放在最右侧,其他的导航栏居中

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
- if (theme.algolia_search.enable || theme.local_search.enable)
- #search-button
- a.site-page.social-icon.search
- i.fas.fa-search.fa-fw
- span=' '+_p('search.title')
!=partial('includes/header/menu_item', {}, {cache: true})
#nav-right
+ if (theme.algolia_search.enable || theme.local_search.enable)
+ #search-button
+ a.site-page.social-icon.search
+ i.fas.fa-search.fa-fw
- #toggle-menu
- a.site-page
- i.fas.fa-bars.fa-fw
+ #toggle-menu
+ a.site-page
+ i.fas.fa-bars.fa-fw

修改的文件nav.pug,版本为Butterfly 4.10.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
nav#nav
span#blog-info
a(href=url_for('/') title=config.title)
if theme.nav.logo
img.site-icon(src=url_for(theme.nav.logo))
if theme.nav.display_title
span.site-name=config.title

#menus
!=partial('includes/header/menu_item', {}, {cache: true})

#nav-right
if (theme.algolia_search.enable || theme.local_search.enable || theme.docsearch.enable)
#search-button
a.site-page.social-icon.search(href="javascript:void(0);")
i.fas.fa-search.fa-fw

#toggle-menu
a.site-page
i.fas.fa-bars.fa-fw

居中

使用自定义[blogRoot]/self/css/meihua.css,添加下面的代码

1
2
3
4
5
6
7
#nav-right{
flex:1 1 auto;
justify-content: flex-end;
margin-left: auto;
display: flex;
flex-wrap:nowrap;
}

去掉导航栏下的蓝色长条

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
#nav *::after{
background-color: transparent!important;
}

子菜单横向布局

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* ----------导航栏横向下拉框---------- */

.menus_item_child li:not(#sidebar-menus li){
float: left;
border-radius: 6px!important;
-webkit-border-radius: 6px!important;
-moz-border-radius: 6px!important;
-ms-border-radius: 6px!important;
-o-border-radius: 6px!important;
}
.menus_item_child:not(#sidebar-menus ul){
/*left:calc(-150%)!important;*//*这是估算值,为了保持元素居中的,如果不合适可以自己调*/
left:50%;
translate:-50%;
}

显示标题

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug

1
2
3
4
5
6
7
8
9
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
!=partial('includes/header/menu_item', {}, {cache: true})
+ center(id="name-container")
+ a(id="page-name" href="javascript:scrollToTop()") PAGE_NAME
...

[blogRoot]/self/js/创建jquery.js文件,添加以下代码

1
2
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});

然后添加nav.js,并且按照注释修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//js有一个小问题:就是只要鼠标滚动不论哪里都会响应,即便你滚动的是子元素

//2022.9.11 已修复,需要jq,请自行引入
document.getElementById("name-container").setAttribute("style", "display:none");

var position = $(window).scrollTop();

$(window).scroll(function () {

var scroll = $(window).scrollTop();

if (scroll > position) {


document.getElementById("name-container").setAttribute("style", "");
document.getElementsByClassName("menus_items")[1].setAttribute("style", "display:none!important");

} else {


document.getElementsByClassName("menus_items")[1].setAttribute("style", "");
document.getElementById("name-container").setAttribute("style", "display:none");

}

position = scroll;

});
function scrollToTop(){
document.getElementsByClassName("menus_items")[1].setAttribute("style","");
document.getElementById("name-container").setAttribute("style","display:none");
btf.scrollToDest(0, 500);
}
//修复没有弄右键菜单的童鞋无法回顶部的问题
document.getElementById("page-name").innerText = document.title.split(" | Ariasakaの小窝")[0];
/*这里是去掉你的网站全局名称的设置,如果你不需要去掉,你可以写成:
document.getElementById("page-name").innerText=document.title

或者把你的网站的分隔符和全局网站名称加上去*/

最后添加如下css,按照注释修改参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
2022.10.4更新:
根据我发现的没有自适应,间距不合理问题进行调整,如果用了这个的朋友们建议改一改
*/
#page-name::before{
font-size:18px;
position: absolute;
width:100%;
height:100%;
border-radius: 8px;
color:white!important;
top:0;
left:0;
content:'回到顶部';
background-color: var(--lyx-theme);
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
opacity: 0;
box-shadow: 0 0 3px var(--lyx-theme);
line-height: 45px; /*如果垂直位置不居中可以微调此值,也可以删了*/
}
#page-name:hover:before{
opacity: 1;
}
@media screen and (max-width:900px){
#page-name,#menus{
display:none!important;
}
}

#name-container{
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
#name-container:hover{
scale:1.03
}
#page-name{
position: relative;
padding:10px 30px/*如果文字间隔不合理可以微调修改,第二个是水平方向的padding,第一个是垂直的*/
}
#nav{
padding: 0 20px;
}

导航栏显示haver颜色

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* ----------修改导航栏的haver---------- */

.site-page {
padding: 5px;
margin: 3px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
.site-page:hover {
background-color: var(--gglss-theme);
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 5px;
}
.site-page.child:hover {
background-color: var(--gglss-theme)!important;
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 4px;
}

/* ----------网站标题部分的增强版---------- */
#site-name::before{
opacity: 0;
background-color: var(--gglss-theme)!important;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-ms-border-radius: 8px;
-o-border-radius: 8px;
transition: .3s;
-webkit-transition: .3s;
-moz-transition: .3s;
-ms-transition: .3s;
-o-transition: .3s;
position:absolute;
top:0!important;
right:0!important;
width:100%;
height:100%;
content: "\f015";
box-shadow: 0 0 5px var(--gglss-theme);
font-family: "Font Awesome 6 Free";
text-align: center;
color:white;
line-height:34px;/*如果有溢出或者垂直不居中的现象微调一下这个参数*/
font-size: 18px;/*根据个人喜好*/
}
#site-name:hover::before{
opacity: 1;
scale:1.03;
}
#site-name{
position: relative;
font-size: 24px; /*一定要把字体调大点,否则效果惨不忍睹!*/
}
:root{
--gglss-theme:#49B1F5 /*我的主题色*/
}

侧边栏分类归档美化

修改 aside_archives文件

打开 [you_blog]\themes\butterfly\scripts\helpers\aside_archives.js 修改第 92 行左右。

1
2
3
4
5
6
7
8
9
10
result += transform ? transform(item.name) : item.name
result += '</span>'

if (showCount) {
- result += `<span class="card-archive-list-count">${item.count}</span>`
+ result += `<div class="card-archive-list-count-group"><span class="card-archive-list-count">${item.count}</span><span>篇</span></div>`
}
result += '</a>'
result += '</li>'

增加css

在自定义[blogRoot]/self/css/meihua.css文件中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* 侧栏归档样式start */
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.5rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-count-group {
display: flex;
flex-direction: row;
align-items: baseline;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child {
width: fit-content;
margin-left: 4px;
}
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.1rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-date {
font-size: 14px;
opacity: 0.6;
}
li.card-category-list-item {
flex: 0 0 31%;
}
li.card-archive-list-item {
flex: 0 0 48%;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
color: #fff;
/* background-color: #3b70fc; */
background-color: #49B1F5; /*侧边栏的鼠标悬浮颜色*/
box-shadow: 0 8px 12px -3px #4259ef23;
border-radius: 8px;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
@media screen and (min-width: 1300px) {
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
transform: scale(1.03);
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:active {
transform: scale(0.97);
}
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a {
border-radius: 8px;
margin: 4px 0;
display: flex;
flex-direction: column;
align-content: space-between;
border: 1px solid #e3e8f7;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child {
width: auto;
flex: inherit;
}
#aside-content .card-archives ul.card-archive-list,
#aside-content .card-categories ul.card-category-list {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
}
/* 侧栏归档样式end */

添加夜间模式的转换动画

转自雷雷屋头

新建 sun_moon.pug

[you_blog]\themes\butterfly\layout\includes\custom\ 文件夹下,新建 sun_moon.pug 文件

1
2
3
4
5
6
7
8
9
10
11
svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0')
symbol#icon-sun(viewBox='0 0 1024 1024')
path(d='M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z', fill='#FFD878', p-id='8420')
path(d='M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z', fill='#FFE4A9', p-id='8421')
path(d='M512 109.248L626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z', fill='#4D5152', p-id='8422')
path(d='M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z', fill='#4D5152', p-id='8423')
symbol#icon-moon(viewBox='0 0 1024 1024')
path(d='M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z', fill='#FFB531', p-id='11345')
path(d='M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z', fill='#030835', p-id='11346')


新建css

[blogRoot]/self/css/新建sun_moon.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* 白天夜晚切换动画start */
.Cuteen_DarkSky, .Cuteen_DarkSky:before {
content: '';
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 88888888;
}
.Cuteen_DarkSky {
background: linear-gradient(#feb8b0, #fef9db);
}
.Cuteen_DarkSky:before {
transition: 2s ease all;
opacity: 0;
background: linear-gradient(#4c3f6d, #6c62bb, #93b1ed);
}
.DarkMode .Cuteen_DarkSky:before {
opacity: 1;
}
.Cuteen_DarkPlanet {
z-index: 99999999;
position: fixed;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
-webkit-animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
transform-origin: center bottom;
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.Cuteen_DarkPlanet:after {
position: absolute;
left: 35%;
top: 40%;
width: 9.375rem;
height: 9.375rem;
border-radius: 50%;
content: '';
background: linear-gradient(#fefefe, #fffbe8);
}
.search span {
display: none;
}
.menus_item a {
text-decoration: none !important;
}
.icon-V {
padding: 5px;
}
@-moz-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-o-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
/* 白天夜晚切换动画end */


新建js

[blogRoot]/self/js/新建`sun_moon.js,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 白天夜晚切换动画start
function switchNightMode() {
document.querySelector('body').insertAdjacentHTML('beforeend', '<div class="Cuteen_DarkSky"><div class="Cuteen_DarkPlanet"></div></div>'),
setTimeout(function() {
document.querySelector('body').classList.contains('DarkMode') ? (document.querySelector('body').classList.remove('DarkMode'), localStorage.setItem('isDark', '0'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')) : (document.querySelector('body').classList.add('DarkMode'), localStorage.setItem('isDark', '1'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')),
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].style.transition = 'opacity 3s';
document.getElementsByClassName('Cuteen_DarkSky')[0].style.opacity = '0';
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].remove();
}, 1e3);
}, 2e3)
})
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
document.querySelector('body').classList.add('DarkMode'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
}
// 白天夜晚切换动画end


引用 sun_moon.pug

修改 [you_blog]\themes\butterfly\layout\includes\head.pug, 在文件末位增加以下代码:

1
2
3
4
5
6
7
8
9
10
11
  //- global config
!=partial('includes/head/config', {}, {cache: true})

include ./head/config_site.pug
include ./head/noscript.pug

!=fragment_cache('injectHeadJs', function(){return inject_head_js()})

!=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
+ include ./custom/sun_moon.pug

替换昼夜切换按钮

修改[you_blog]\themes\butterfly\layout\includes\rightside.pug, 替换原本的昼夜切换按钮

1
2
3
4
5
6
7
8
9
10
11
  when 'translate'
if translate.enable
button#translateLink(type="button" title=_p('rightside.translate_title'))= translate.default
when 'darkmode'
if darkmode.enable && darkmode.button
- button#darkmode(type="button" title=_p('rightside.night_mode_title'))
- i.fas.fa-adjust
+ a.icon-V.hidden(onclick='switchNightMode()', title=_p('rightside.night_mode_title'))
+ svg(width='25', height='25', viewBox='0 0 1024 1024')
+ use#modeicon(xlink:href='#icon-moon')

为博客添加波浪效果

修改index.pug文件

修改themes/butterfly/layout/includes/header/index.pug,在第 38 行左右

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if top_img !== false
if is_post()
include ./post-info.pug
+ section.main-hero-waves-area.waves-area
+ svg.waves-svg(xmlns='http://www.w3.org/2000/svg', xlink='http://www.w3.org/1999/xlink', viewBox='0 24 150 28', preserveAspectRatio='none', shape-rendering='auto')
+ defs
+ path#gentle-wave(d='M -160 44 c 30 0 58 -18 88 -18 s 58 18 88 18 s 58 -18 88 -18 s 58 18 88 18 v 44 h -352 Z')
+ g.parallax
+ use(href='#gentle-wave', x='48', y='0')
+ use(href='#gentle-wave', x='48', y='3')
+ use(href='#gentle-wave', x='48', y='5')
+ use(href='#gentle-wave', x='48', y='7')
#post-top-cover
img#post-top-bg(class='nolazyload' src=bg_img)
else if is_home()
#site-info
h1#site-title=site_title
if theme.subtitle.enable

添加css

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 波浪css */
.main-hero-waves-area {
width: 100%;
position: absolute;
left: 0;
bottom: -11px;
z-index: 5;
}
.waves-area .waves-svg {
width: 100%;
height: 5rem;
}
/* Animation */

.parallax > use {
animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
}
.parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #f7f9febd;
}
.parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #f7f9fe82;
}
.parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #f7f9fe36;
}
.parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #f7f9fe;
}
/* 黑色模式背景 */
[data-theme="dark"] .parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #18171dc8;
}
[data-theme="dark"] .parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #18171d80;
}
[data-theme="dark"] .parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #18171d3e;
}
[data-theme="dark"] .parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #18171d;
}

@keyframes move-forever {
0% {
transform: translate3d(-90px, 0, 0);
}
100% {
transform: translate3d(85px, 0, 0);
}
}
/*Shrinking for mobile*/
@media (max-width: 768px) {
.waves-area .waves-svg {
height: 40px;
min-height: 40px;
}
}

注意: 的是 css 中fill属性可以控制波浪颜色

页脚透明

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 页脚透明start */
#footer {
background: var(--icat-footer-background);
}

#footer #footer-wrap {
color: var(--font-color)
}

#footer #footer-wrap a {
color: var(--font-color)
}

/* 页脚透明end */

文章页版权样式美化

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 版权样式调整start */
#post .post-copyright {
background: var(--icat-card-bg);
padding: 1rem 1.3rem;
overflow: hidden;
border: var(--style-border);
border-width: 1px;
transition: 0.3s;
position: relative;
margin: 1.5rem 0px 0.5rem;
border-radius: 8px;
}
#post .post-copyright:before {
position: absolute;
right: 22px;
top: -77px;
content: "\e039";
font-size: 180px;
font-family: "iconfont";
color: var(--icat-fontcolor);
opacity: 0.1;
filter: blur(7px);
}
/* 版权样式调整end */

分类页和标签页面添加Bar条

使用justlovesmile

新增pug文件

新增categoryBar.pug文件

首先是分类条,在themes/butterfly/layout/includes/处新建文件categoryBar.pug

1
2
3
4
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("category")
a.category-bar-more(href="/categories/") 更多

新增tarsBar.pug文件

其次是标签条,在themes/butterfly/layout/includes/处新建文件tagBar.pug,因为样式一样,所以没有更改id和class名称。

1
2
3
4
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("tag")
a.category-bar-more(href="/tags/") 更多

新建Hexo辅助函数

theme/butterfly/scripts/helpers/中创建get_arrays.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
hexo.extend.helper.register('getarray_bar', function (types) {
if (!types) {
types = "category"
}
const categoriesBar = function (categories) {
if (!categories || !categories.length) return ``
const categoryArr = []
hexo.locals.get('categories').map(function (category) {
categoryArr.push({ name: category.name, value: category.length })
})
categoryArr.sort((a, b) => { return b.value - a.value })
let strCategoriesBar = ``
for (let i = 0; i < categories.length; i++) {
strTemp=`
<div class="category-bar-item" id="${categoryArr[i].name}">
<a href="/categories/${categoryArr[i].name}/">${categoryArr[i].name}</a>
</div>`
strCategoriesBar+=strTemp
}
return strCategoriesBar
}
const tagsBar = function(tags) {
if (!tags || !tags.length) return ``
const tagArr = []
hexo.locals.get('tags').map(function (tag) {
tagArr.push({ name: tag.name, value: tag.length })
})
tagArr.sort((a, b) => { return b.value - a.value })
let strTagsBar = ``
for (let i = 0; i < tags.length; i++) {
strTemp=`
<div class="category-bar-item" id="${tagArr[i].name}">
<a href="/tags/${tagArr[i].name}/">${tagArr[i].name}</a>
</div>`
strTagsBar+=strTemp
}
return strTagsBar
}
if (types == "category"){
return categoriesBar(this.site.categories)
}
if (types == "tag"){
return tagsBar(this.site.tags)
}
})

在页面引用模块

在分类页面引用:找到theme/butterfly/layout/category.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extends includes/layout.pug

block content
if theme.category_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts.category_ui
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#category
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-folder-open
+ include includes/categoryBar.pug
.article-sort-title= _p('page.category') + ' - ' + page.category
+articleSort(page.posts)
include includes/pagination.pug

在标签页引用:找到theme/butterfly/layout/tag.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extends includes/layout.pug

block content
if theme.tag_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#tag
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-tags
+ include includes/tagBar.pug
.article-sort-title= _p('page.tag') + ' - ' + page.tag
+articleSort(page.posts)
include includes/pagination.pug

引入js和css文件

在自定义的js里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// -----------分类条的js-----------
categoriesBarActive()
topCategoriesBarScroll()
tagsBarActive()

//分类条
function categoriesBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#category-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/categories\/.*?\//;
var patbool = pattern.test(urlinfo);
console.log(patbool);
// 获取当前的分类
if (patbool) {
var valuegroup = urlinfo.split("/");
console.log(valuegroup[2]);
// 获取当前分类
var nowCategorie = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowCategorie).classList.add("select");
}
}
}

}

//鼠标控制横向滚动
function topCategoriesBarScroll(){
if (document.getElementById("category-bar-items")){
let xscroll = document.getElementById("category-bar-items");
xscroll.addEventListener("mousewheel", function (e) {
//计算鼠标滚轮滚动的距离
let v = -e.wheelDelta / 2;
xscroll.scrollLeft += v;
//阻止浏览器默认方法
e.preventDefault();
}, false);
}
}

// -----------标签条的js-----------
//标签条
function tagsBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
//console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#tags-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/tags\/.*?\//;
var patbool = pattern.test(urlinfo);
//console.log(patbool);
// 获取当前的标签
if (patbool) {
var valuegroup = urlinfo.split("/");
//console.log(valuegroup[2]);
// 获取当前分类
var nowTag = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowTag).classList.add("select");
}
}
}
}

修改导航栏一闪的问题

使用的安知鱼

修改main.js

修改顶栏一闪而过的 bug 修改本地themes/butterfly/source/js/main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  window.scrollCollect = () => {
return btf.throttle(function (e) {
const currentTop = window.scrollY || document.documentElement.scrollTop
const isDown = scrollDirection(currentTop)
if (currentTop > 56) {
+ $header.classList.add('is-top-bar')
if (isDown) {
if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible')
if (isChatBtnShow && isChatShow === true) {
chatBtnHide()
isChatShow = false
}
} else {
if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible')
if (isChatBtnHide && isChatShow === false) {
chatBtnShow()
isChatShow = true
}
}
$header.classList.add('nav-fixed')
if (window.getComputedStyle($rightside).getPropertyValue('opacity') === '0') {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
} else {
if (currentTop === 0) {
- $header.classList.remove('nav-fixed', 'nav-visible')
+ $header.classList.remove('is-top-bar')
}
$rightside.style.cssText = "opacity: ''; transform: ''"
}

if (document.body.scrollHeight <= innerHeight) {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
}, 200)()
}

侧边栏最近文章梅花

修改index.pug布局

去除首页最近文章显示,改为文章页显示,修改themes/butterfly/layout/includes/widget/index.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
else
//- page
!=partial('includes/widget/card_author', {}, {cache: true})
!=partial('includes/widget/card_announcement', {}, {cache: true})
!=partial('includes/widget/card_top_self', {}, {cache: true})

.sticky_layout
if showToc
include ./card_post_toc.pug

//- !=partial('includes/widget/card_recent_post', {}, {cache: true}) //- 注释掉最近文章

!=partial('includes/widget/card_ad', {}, {cache: true})
!=partial('includes/widget/card_newest_comment', {}, {cache: true})
!=partial('includes/widget/card_categories', {}, {cache: true})
!=partial('includes/widget/card_tags', {}, {cache: true})

添加css美化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#aside-content .aside-list > .aside-list-item .content > time {
display: none;
}
#aside-content .aside-list > .aside-list-item .content > .title {
-webkit-line-clamp: 3;
font-weight: 700;
padding: 2px 0;
}
#aside-content .aside-list > .aside-list-item {
padding: 8px;
padding-top: 6px !important;
padding-bottom: 6px !important;
border-radius: 12px;
transition: 0.3s;
margin: 4px 0;
cursor: pointer;
}
@media screen and (min-width: 1300px) {
#aside-content .aside-list > .aside-list-item:hover {
transform: scale(1.03);
}
#aside-content .aside-list > .aside-list-item:active {
transform: scale(0.97);
}
}
#aside-content .aside-list > .aside-list-item:hover .thumbnail > img {
transform: scale(1);
}
#aside-content .aside-list > .aside-list-item:not(:last-child) {
border-bottom: 0 dashed var(--anzhiyu-background) !important;
}
#aside-content .aside-list > .aside-list-item .thumbnail {
border-radius: 8px;
border: var(--style-border);
}
#aside-content .aside-list > .aside-list-item:hover {
background: var(--anzhiyu-blue-main);
color: var(--anzhiyu-white);
transition: 0.3s;
box-shadow: var(--anzhiyu-shadow-main);
}
#aside-content .aside-list > .aside-list-item:hover a {
color: var(--anzhiyu-white) !important;
}
.card-widget.card-recent-post {
padding: 0.4rem 0.6rem !important;
}

文章页H1-H6添加小风车

使用的安知鱼

修改主题配置文件

1
2
3
4
5
6
beautify:
enable: true
field: post # site/post
# title-prefix-icon: '\f0c1' 原内容
title-prefix-icon: '\f863'
title-prefix-icon-color: "#F47466"

让小风车转起来

在自定义 [blog]/source/self/css/custom.css 文件中,加入以下代码即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* 文章页H1-H6图标样式效果 */
h1::before,
h2::before,
h3::before,
h4::before,
h5::before,
h6::before {
-webkit-animation: ccc 1.6s linear infinite;
animation: ccc 1.6s linear infinite;
}
@-webkit-keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
@keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}

小风车的颜色和大小

修改小风车的颜色和大小,加入下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#content-inner.layout h1::before {
color: #ef50a8;
margin-left: -1.55rem;
font-size: 1.3rem;
margin-top: -0.23rem;
}
#content-inner.layout h2::before {
color: #fb7061;
margin-left: -1.35rem;
font-size: 1.1rem;
margin-top: -0.12rem;
}
#content-inner.layout h3::before {
color: #ffbf00;
margin-left: -1.22rem;
font-size: 0.95rem;
margin-top: -0.09rem;
}
#content-inner.layout h4::before {
color: #a9e000;
margin-left: -1.05rem;
font-size: 0.8rem;
margin-top: -0.09rem;
}
#content-inner.layout h5::before {
color: #57c850;
margin-left: -0.9rem;
font-size: 0.7rem;
margin-top: 0rem;
}
#content-inner.layout h6::before {
color: #5ec1e0;
margin-left: -0.9rem;
font-size: 0.66rem;
margin-top: 0rem;
}

小风车hover效果

设置鼠标碰到标题时,小风车跟随标题变色,且像是被光标阻碍了,转速变慢。鼠标离开恢复转速。也可以设置为 none 鼠标碰到停止转动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#content-inner.layout h1:hover,
#content-inner.layout h2:hover,
#content-inner.layout h3:hover,
#content-inner.layout h4:hover,
#content-inner.layout h5:hover,
#content-inner.layout h6:hover {
color: #3b70fc;
}
#content-inner.layout h1:hover::before,
#content-inner.layout h2:hover::before,
#content-inner.layout h3:hover::before,
#content-inner.layout h4:hover::before,
#content-inner.layout h5:hover::before,
#content-inner.layout h6:hover::before {
color: #3b70fc;
-webkit-animation: ccc 3.2s linear infinite;
animation: ccc 3.2s linear infinite;
}

右下角设置 icon 转的太快了,让它慢一点吧。继续添加:

1
2
3
4
/* 页面设置icon转动速度调整 */
#rightside_config i.fas.fa-cog.fa-spin {
animation: fa-spin 5s linear infinite;
}

文章加密

安装插件

通过插件,实现文章输入密码才能浏览

1
npm install hexo-blog-encrypt --save

修改文章

在文章头部加入

1
2
3
4
5
---
title: 加密文章测试,输入test即可查看
password: test
message: 测试加密,这里的密码是:test
---

文章增加最新文章标识

转载于云端

修改page.js

在js文件里面添加一段js

1
2
3
4
5
6
7
8
9
// 最新文章
hexo.extend.helper.register('newPost', function() {
let name, time;
hexo.locals.get('posts').map((item, index) => {
if (index == 0) name = item.title, time = item.date
else if (item.date > time) { name = item.title, time = item.date }
});
return name
})

修改post-ui.pug

themes\butterfly\layout\includes\mixins\post-ui.pug 添加代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mixin postUI(posts)
+ - let newTitle= newPost()
each article , index in page.posts.data
.recent-post-item
-
let link = article.link || article.path
let title = article.title || _p('no_title')
const position = theme.cover.position
let leftOrRight = position === 'both'
? index%2 == 0 ? 'left' : 'right'
: position === 'left' ? 'left' : 'right'
let post_cover = article.cover
let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : ''
-
if post_cover && theme.cover.index_enable
.post_cover(class=leftOrRight)
a(href=url_for(link) title=title)
img.post_bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
+ if newTitle == title
+ span(class=`newPost-${leftOrRight=='left'?'right':'left'}`) 最新

添加自定义CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#recent-posts>.recent-post-item {
position: relative;
}

/* 最新文章图标 */
.newPost-left,
.newPost-right {
position: absolute;
top: 0;
color: white;
padding: 0 15px;
background-color: #49b1f5;
border-radius: 0 0 10px 10px;
}

.newPost-left {
left: 15px;
}

.newPost-right {
right: 15px;
}

hexo加速

使用[akilar](使用gulp压缩博客静态资源 | Akilarの糖果屋)教程

安装Gulp插件

在博客根目录[Blogroot]打开终端,输入:

1
2
npm install --global gulp-cli #全局安装gulp指令集
npm install gulp --save #安装gulp插件

安装各个下属插件以实现对各类静态资源的压缩

  • 压缩HTML:
1
2
3
npm install gulp-htmlclean --save-dev
npm install gulp-html-minifier-terser --save-dev
# 用gulp-html-minifier-terser可以压缩HTML中的ES6语法
  • 压缩CSS:
1
npm install gulp-clean-css --save-dev
  • 压缩JS:
1
npm install gulp-terser --save-dev
  • 压缩字体包:
1
npm install gulp-fontmin --save-dev

为Gulp创建gulpfile.js任务脚本

在博客根目录[Blogroot]下新建gulpfile.js,打开[Blogroot]\gulpfile.js,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//用到的各个插件
var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var fontmin = require('gulp-fontmin');
// gulp-tester
var terser = require('gulp-terser');
// 压缩js
gulp.task('compress', async() =>{
gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(terser())
.pipe(gulp.dest('./public'))
});
//压缩css
gulp.task('minify-css', () => {
return gulp.src(['./public/**/*.css'])
.pipe(cleanCSS({
compatibility: 'ie11'
}))
.pipe(gulp.dest('./public'));
});
//压缩html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true, //清除html注释
collapseWhitespace: true, //压缩html
collapseBooleanAttributes: true,
//省略布尔属性的值,例如:<input checked="true"/> ==> <input />
removeEmptyAttributes: true,
//删除所有空格作属性值,例如:<input id="" /> ==> <input />
removeScriptTypeAttributes: true,
//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,
//删除<style>和<link>的 type="text/css"
minifyJS: true, //压缩页面 JS
minifyCSS: true, //压缩页面 CSS
minifyURLs: true //压缩页面URL
}))
.pipe(gulp.dest('./public'))
});
//压缩字体
function minifyFont(text, cb) {
gulp
.src('./public/fonts/*.ttf') //原字体所在目录
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest('./public/fontsdest/')) //压缩后的输出目录
.on('end', cb);
}

gulp.task('mini-font', (cb) => {
var buffers = [];
gulp
.src(['./public/**/*.html']) //HTML文件所在目录请根据自身情况修改
.on('data', function(file) {
buffers.push(file.contents);
})
.on('end', function() {
var text = Buffer.concat(buffers).toString('utf-8');
minifyFont(text, cb);
});
});
// 运行gulp命令时依次执行以下任务
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html','mini-font'
#))

在每次运行完hexo generate生成静态页面后,运行gulp对其进行压缩。指令流程如下:

1
2
3
4
hexo clean
hexo generate
gulp
hexo server 或 hexo deploy

手机端悬浮窗

使用akilar教程

新建[Blogroot]\themes\butterfly\source\js\custom\fixed_card_widget.js,用来控制显隐逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 固定卡片点击动作
function FixedCardWidget(type,name,index){
// 根据id或class选择元素
if (type === "id"){
var tempcard = document.getElementById(name);
}
else{
var tempcard = document.getElementsByClassName(name)[index];
}
// 若元素存在
if (tempcard) {
// 首先判断是否存在fixed-card-widget类
if (tempcard.className.indexOf('fixed-card-widget') > -1){
// 存在则移除
RemoveFixedCardWidget();
}
else{
// 不存在则先初始化防止卡片叠加
RemoveFixedCardWidget();
//新建退出蒙版
CreateQuitBox();
// 再添加固定卡片样式
tempcard.classList.add('fixed-card-widget');
}
}
}
//创建一个蒙版,作为退出键使用
function CreateQuitBox(){
var quitBox = `<div id="quit-box" onclick="RemoveFixedCardWidget()"></div>`
var asideContent = document.getElementById('aside-content');
asideContent.insertAdjacentHTML("beforebegin",quitBox)
}
// 移除卡片方法
function RemoveFixedCardWidget(){
var activedItems = document.querySelectorAll('.fixed-card-widget');
if (activedItems) {
for (i = 0; i < activedItems.length; i++) {
activedItems[i].classList.remove('fixed-card-widget');
}
}
//移除退出蒙版
var quitBox = document.getElementById('quit-box');
if (quitBox) quitBox.remove();
}
// 常规先初始化,确保切换页面后不会有固定卡片留存
RemoveFixedCardWidget()

新建[Blogroot]\themes\butterfly\source\css\_layout\fixed_card_widget.styl,此处使用stylus交给插件编译,能够更快捷的适配多种内核样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// 垂直居中卡片样式(排除toc目录卡片)
.fixed-card-widget
&:not(#card-toc)
visibility visible!important
display block!important
position fixed!important
bottom 0
left 0
top 0
right 0
margin auto
margin-bottom auto!important
margin-top auto!important
max-width 300px
max-height 500px
width auto
height auto
overflow-y: scroll
z-index 999
animation rotateX 0.5s ease
animation-fill-mode forwards
&::-webkit-scrollbar
width: 0
// 针对说说卡片做样式兼容适配
.card-shuo
&.fixed-card-widget
#artitalk_main
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
#operare_artitalk
.c2
z-index 1000
// 针对标签卡片做样式兼容适配
.card-tags
&.fixed-card-widget
.card-tag-cloud
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
// 控制手机端可见
@media screen and (max-width: 768px)
div#fixedcard-dashboard
display flex!important
// 侧栏悬浮按钮样式
div#fixedcard-dashboard
position fixed
top 150px
width fit-content
height 40px
opacity 0.3
transition all 0.5s
display none
background rgba(255,255,255,0.9)
padding 5px 10px
border-top-right-radius 20px
border-bottom-right-radius 20px
z-index 1000
&:hover
opacity 1
button
&.fixedcard-activebtn
width 30px
opacity 1
pointer-events all
// 按钮样式
button
&.fixedcard-activebtn
width 0px
height 30px
transition all .5s
display flex
opacity 0
align-items center
justify-content space-around
pointer-events none
color #757273
// 悬浮按钮头像
.fixedcard-user-avatar
display inline-block
img
&.fixedcard-user-avatar-img
width 30px
height 30px
border-radius 50%
// 悬浮按钮夜间模式适配
[data-theme="dark"]
div#fixedcard-dashboard
background rgba(55,55,55,0.9)
button
&.fixedcard-activebtn
color #bcbdbd

// 卡片开启动画效果
@keyframes rotateX
from
transform rotateX(90deg)
to
transform rotateX(0deg)
// 退出蒙版效果
div#quit-box
position fixed
display block
left 0
top 0
width 100vh
height 100vh
z-index 99
background rgba(25,25,25,0.3)


[data-theme="dark"]
div#quit-box
background rgba(147, 146, 128, 0.3)

新建[Blogroot]\themes\butterfly\layout\includes\custom\fixed_card_widget.pug,以后的源码魔改教程都会尽量将改动文件归纳到带custom字样的文件夹里,便于管理魔改文件。

1
2
3
4
5
6
7
8
9
10
11
12
#fixedcard-dashboard
if is_post()
each poitem in theme.fixed_card_widget.post
button.fixedcard-activebtn(type="button" title=poitem.title onclick=`FixedCardWidget("` + poitem.type + `","` + poitem.name + `","` + poitem.index + `")`)
i(class=poitem.icon)
else
each paitem in theme.fixed_card_widget.page
button.fixedcard-activebtn(type="button" title=paitem.title onclick=`FixedCardWidget("` + paitem.type + `","` + paitem.name + `","` + paitem.index + `")`)
i(class=paitem.icon)
.fixedcard-user-avatar.fixedcard-activebtn(onclick="RemoveFixedCardWidget()")
img.fixedcard-user-avatar-img(src=url_for(theme.avatar.img) title=config.author)

修改[Blogroot]\themes\butterfly\layout\includes\additional-js.pug,直接加在文件末尾即可,但是注意缩进!

1
2
3
4
  if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async data-pjax src=url_for(theme.CDN.busuanzi))
+ if !theme.aside.mobile && theme.fixed_card_widget.enable
+ include ./custom/fixed_card_widget.pug

因为还做了page和post页面不同悬浮按钮的配置,为了让它能够自动切换而不是惰性加载,需要修改[Blogroot]\themes\butterfly\layout\includes\third-party\pjax.pug大约第十四行的位置,在pjax选择器中加入悬浮按钮的id。

1
2
3
4
5
6
7
8
9
10
  script.
let pjaxSelectors = [
'title',
'#config-diff',
'#body-wrap',
'#rightside-config-hide',
'#rightside-config-show',
+ "#fixedcard-dashboard",
'.js-pjax'
]

修改[Blogroot]\_config.butterfly.yml,新增配置项,此处的选择器其实就是提取了document.getElementsByClassName("name")[index]document.getElementById("name")这两个方法中的参数来确保能够找到侧栏卡片。原本其实是可以做成自动根据侧栏生成的,但是考虑到还有插件挂载和自定义卡片,以及还有部分用户会刻意隐藏一些侧栏卡片,所以干脆还是让用户自己去配置想要加到菜单的卡片好了。
找id或者class的办法很简单,用F12开启控制台,用左上角的元素选择器点选想要的侧栏卡片,在源码栏找到对应的class或者id。因为class是可以重名的,所以还存在一个序列问题,从0开始计数。此处为了避免语意混乱,建议还是用特征明显的class或者id来选择对应卡片。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#侧栏悬浮卡片控制按钮
#https://akilar.top/posts/451ac5f8/
fixed_card_widget:
enable: true
page: #页面显示按钮
- type: class #侧栏卡片选择器类型
name: card-info #侧栏卡片选择器名称
index: 0 #侧栏卡片选择器序列
icon: fas fa-address-book #图标
title: 用户信息 #悬停显示提示
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-shuo
index: 0
icon: fas fa-comments
title: 碎碎念
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
- type: id
name: card-newest-comments
index: 0
icon: fas fa-comment-dots
title: 最新评论
- type: class
name: card-tags
index: 0
icon: fas fa-tags
title: 标签
- type: class
name: card-webinfo
index: 0
icon: fas fa-chart-line
title: 网站咨询
post: #文章页显示按钮
- type: class
name: card-info
index: 0
icon: fas fa-address-book
title: 用户信息
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章

修改[Blogroot]_config.butterfly.yml的inject配置项

1
2
3
4
5
 inject:
head:

bottom:
+ - <script data-pjax defer src="/js/custom/fixed_card_widget.js"></script>

注意要关闭手机端显示侧栏卡片才能启用fixed卡片样式。

1
2
3
4
5
6
7
  aside:
enable: true
hide: false
button: true
- mobile: true # display on mobile
+ mobile: false # display on mobile
position: right # left or right

设置弹窗

这个功能使用的注:这个魔改使用了Ariasakaの小窝Leonus的教程

新建setting.pug文件

[blogRoot]/themes\acryple\layout\includes\setting.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
html
body
#settingWindow.js-pjax
span.setting-title
span#stt 控制面板
a(id="close-console" onclick="toggleWinbox();") ×
button#backer(onclick='$(\'.asetting\').hide();$(\'.settingx\').show();$(\'#backer\').hide()')
i.fa.fa-chevron-left
span 返回
.settings
#setting-buttons
button.settingx(onclick='$(\'#theme-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fas.fa-layer-group
span 外观
button.settingx(onclick='$(\'#font-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-font
span 字体
button.settingx(onclick='$(\'#background-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.far.fa-image
span 背景
button.settingx(onclick='$(\'#con-echarts\').show();$(\'.settingx\').hide();$(\'#backer\').show();var evt = document.createEvent("HTMLEvents");evt.initEvent("resize", false, false);window.dispatchEvent(evt);')
i.fas.fa-chart-pie
span 统计
button.settingx(onclick='$(\'#con-abouts\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-cloud-download
span 关于
#setting-hides
#theme-settings.asetting
h2.content-head 性能设置
p
.content(style='display:flex')
input#blur(type='checkbox', onclick='setBlur()')
.content-text 禁用模糊效果
//- .content(style='display:flex')
//- input#yjjs(type='checkbox', onclick='yjjs1()')
//- .content-text 硬件加速
.content(style='display:flex')
input#fpson(type='checkbox', onclick='fpssw()' style="flex-shrink: 0")
.content-text
span 开启帧率检测(
a(href='javascript:window.location.reload()') 刷新
span 后生效)
p
h2.content-head 主题设置
//- .content(style='display:flex')
//- input#hideAside(type='checkbox', onclick='toggleRightside()')
//- .content-text 隐藏侧边栏
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleAplayer()')
.content-text 显示aplayer
.content(style='display:flex')
input#hideSakura(type='checkbox', onclick='toggleSakuras()')
.content-text 落樱特效
.content(style='display:flex')
input#autoTheme(type='checkbox', onclick='toggleAutoTheme()')
.content-text 明暗模式自动切换
.content(style='display:flex')
input#autoColor(type='checkbox', onclick='autoColor()')
.content-text 自动主题色(跟随文章封面)
| 未完工
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleNav()')
.content-text 固定导航栏
| ###
.content(style='display:flex')
button.content-button(onclick='switchTheme()') 切换主题

p
h3.content-head 主题色
#themeColorSettings.content(style='display:flex')
input#red(type='radio', name='colors', onclick='setColor(\'red\')')
input#orange(type='radio', name='colors', onclick='setColor(\'orange\')')
input#yellow(type='radio', name='colors', onclick='setColor(\'yellow\')')
input#green(type='radio', name='colors', onclick='setColor(\'green\')')
input#blue(type='radio', name='colors', onclick='setColor(\'blue\')')
input#heoblue(type='radio', name='colors', onclick='setColor(\'heoblue\')')
input#darkblue(type='radio', name='colors', onclick='setColor(\'darkblue\')')
input#purple(type='radio', name='colors', onclick='setColor(\'purple\')')
input#pink(type='radio', name='colors', onclick='setColor(\'pink\')', checked)
input#black(type='radio', name='colors', onclick='setColor(\'black\')')
input#blackgray(type='radio', name='colors', onclick='setColor(\'blackgray\')')
#font-settings.asetting
h2.content-head 字体设置
p#swfs
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYTMR\'!important;color:black', onclick='setFont(\'HYTMR\')') 汉仪唐美人
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYPailou\'!important;color:black', onclick='setFont(\'HYPailou\')') 汉仪新蒂牌楼
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXJLJ\'!important;color:black', onclick='setFont(\'FZXJLJ\')') 方正金陵体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXS\'!important;color:black', onclick='setFont(\'FZXS\')') 方正像素体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'ZhuZiAWan\'!important;color:black', onclick='setFont(\'ZhuZiAWan\')') 筑紫A丸ゴシック
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZODZK\'!important;color:black', onclick='setFont(\'FZODZK\')') 方正欧蝶正楷
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Serif\'!important;color:black', onclick='setFont(\'Source Serif\')') 思源宋体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Sans\'!important;color:black', onclick='setFont(\'Source Sans\')') 思源黑体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:-apple-system, IBM Plex Mono ,monosapce,\'微软雅黑\', sans-serif;', onclick='setFont(\'main\')') 系统默认
br
#background-settings.asetting
h2(style='margin-left:10px') 背景设置
div
span 注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效
button.content-button(onclick='localStorage.removeItem(\'blogbg\');location.reload();')
i.fa-solid.fa-arrows-rotate
span 点我恢复默认背景
button.content-button(onclick='switchTheme()') 切换主题
h3 图片(手机)
.bgbox
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)\')')
h3 图片(电脑)
.bgbox
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)\')')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aea549be6.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aea549be6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aec701a68.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aec701a68.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aef4a5543.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aef4a5543.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324af3622884.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324af3622884.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/12/08/6391b77ed767c.png)\')')
img(src='https://bu.dusays.com/2022/12/08/6391b77ed767c.png')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp')
h3 渐变色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #B7D31E, #42CE1E)', onclick='changeBg(\'linear-gradient(to right, #B7D31E, #42CE1E)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #06DE86, #06A5DE)', onclick='changeBg(\'linear-gradient(to right, #06DE86, #06A5DE)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #189BC4, #183DC4)', onclick='changeBg(\'linear-gradient(to right, #189BC4, #183DC4)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #C018C4, #C41818)', onclick='changeBg(\'linear-gradient(to right, #C018C4, #C41818)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #8B00BB, #030094)', onclick='changeBg(\'linear-gradient(to right, #8B00BB, #030094)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)', onclick='changeBg(\'linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)', onclick='changeBg(\'linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)\')')
h3 纯色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #7D9D9C', onclick='changeBg(\'#7D9D9C\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #fff', onclick='changeBg(\'#fff\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #49A6E9', onclick='changeBg(\'#49A6E9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #F7CEFF', onclick='changeBg(\'#F7CEFF\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #FFFFCE', onclick='changeBg(\'#FFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #CFFFCE', onclick='changeBg(\'#CFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #17EFE9', onclick='changeBg(\'#17EFE9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #9F17EF', onclick='changeBg(\'#9F17EF\')')
#con-echarts.asetting
h1 文章统计
h2 监控
iframe(src="https://status.yisous.xyz" width="100%" height="500px" frameborder="no")
if !is_page()
h2 文章统计
script(src="https://npm.elemecdn.com/echarts@4.9.0/dist/echarts.min.js")
div(id="posts-chart" data-start="2021-01" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="tags-chart" data-length="10" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="categories-chart" data-parent="true" style="border-radius: 8px; height: 300px; padding: 10px;")
h2 访问统计
| 显示不出来请刷新页面
//-下面换成自己的51la统计

#con-abouts.asetting
h1 关于
| Hexo-theme-Acryple v1.0.100
br
| Ariasaka Console v0.01
br
| 欢迎
a(href="/messageboard")
| 反馈!
#setting-sidesl
button(title="恢复默认设置" class="reSettings con-rightside")
i.fa.fa-repeat
#setting-sides
button(title="繁简转换" class="con-rightside" id="con-translate" onclick="javascript:rmf.translate();")
i.iconfont.icon-fanti
button(title="昼夜切换" class="con-rightside" id="con-mode" onclick="switchDarkMode();")
i.fa.fa-adjust
if is_post()||is_page()
button(title="阅读模式" class="con-rightside" id="con-reading" onclick="rmf.switchReadMode();")
i.fa.fa-book-open
if !is_page()
button(title="单双栏切换" class="con-rightside" id="con-toggleaside" onclick="toggleAside();")
i.fas.fa-arrows-alt-h
if !is_page()
button(title="左右栏切换" class="con-rightside" id="con-toggleleftaside" onclick="switchAside();")
i.fas.fa-binoculars
if is_post()||is_page()
button(title="开关弹幕" class="con-rightside" id="con-barrage" onclick="switchCommentBarrage();")
i.iconfont.icon-danmu
button(title="全屏" class="con-rightside" id="con-fullscreen" onclick="fullScreen();")
i.fas.fa-expand

js部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
document.addEventListener('pjax:complete', tosetting);
document.addEventListener('DOMContentLoaded', tosetting);
function tosetting(){
$("#settingWindow").hide();
if(localStorage.getItem("blur")=="false"){
blur=0;
}else{
blur=1;

}
if(localStorage.getItem("yjjs")=="true"){
yjjs=1;
}else{
yjjs=0;

}
if(localStorage.getItem("fpson")==undefined){
localStorage.setItem("fpson","1");
}
if(!blur){
document.getElementById("settingStyle").innerText=`
*,*:not(.card-info)::before,*::after{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
setBlur=function(){
blur=!blur;
localStorage.setItem("blur",blur);
if(!blur){
document.getElementById("settingStyle").innerText=`
*{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
}
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
yjjs1=function(){
yjjs=!yjjs;
localStorage.setItem("yjjs",yjjs)
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
}
if(localStorage.getItem("blogTheme")=="acrylic"){
document.getElementById("css").href="";
}
switchTheme=function(){
if(document.getElementById("css").href==window.location.protocol+"//"+window.location.host+"/css/stylessimple.css"){
document.getElementById("css").href=""
localStorage.setItem("blogTheme","acrylic");
}else{
document.getElementById("css").href="/css/stylessimple.css"
localStorage.setItem("blogTheme","simple");
}
}
setColor=function(c){
document.getElementById("themeColor").innerText=`:root{--lyx-theme:var(--lyx-${c})!important}`;
localStorage.setItem("themeColor",c);

}
setFont=function(n){
localStorage.setItem("font",n);
if(n=="main"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else if(n=="HYPailou"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="Fredoka,HYPailou,KyoukashoProL,-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else{
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,\"微软雅黑\", sans-serif"
}
document.body.style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,'微软雅黑', sans-serif"
document.documentElement.style.setProperty('--global-font', n)
}
}
if(localStorage.getItem("themeColor")==undefined){
localStorage.setItem("themeColor","pink");
}

setColor(localStorage.getItem("themeColor"));



if(localStorage.getItem("hideRightside")==undefined){
localStorage.setItem("hideRightside","0");
}

if(localStorage.getItem("hideRightside")=="1"){
$("#rightside").toggle()
}
toggleRightside=function(){
$("#rightside").toggle();
localStorage.setItem("hideRightside",Math.abs(Number(localStorage.getItem("hideRightside"))-1))
}
if(localStorage.getItem("font")==undefined){
localStorage.setItem("font","HYTMR")
}
setFont(localStorage.getItem("font"))
// 存数据
// name:命名 data:数据
saveData=function(name, data) {
localStorage.setItem(name, JSON.stringify({ 'time': Date.now(), 'data': data }))
}

// 取数据
// name:命名 time:过期时长,单位分钟,如传入30,即加载数据时如果超出30分钟返回0,否则返回数据
loadData=function(name, time) {
let d = JSON.parse(localStorage.getItem(name));
// 过期或有错误返回 0 否则返回数据
if (d) {
let t = Date.now() - d.time
if (t < (time * 60 * 1000) && t > -1) return d.data;
}
return 0;
}
// 切换背景函数
// 此处的flag是为了每次读取时都重新存储一次,导致过期时间不稳定
// 如果flag为0则存储,即设置背景. 为1则不存储,即每次加载自动读取背景.
changeBg=function(s, flag) {
let bg = document.getElementById('web_bg')
if (s.charAt(0) == '#') {
bg.style.backgroundColor = s
bg.style.backgroundImage = 'none'
} else bg.style.backgroundImage = s
if (!flag) { saveData('blogbg', s) }
}
// 上面两个函数如果你有其他需要存取数据的功能,也可以直接使用

// 读取背景
try {
let data = loadData('blogbg', 1440)
if (data) changeBg(data, 1)
else localStorage.removeItem('blogbg');
} catch (error) { localStorage.removeItem('blogbg'); }



fpssw=function(){
if(localStorage.getItem("fpson")=="1"){
localStorage.setItem("fpson","0");
}else{
localStorage.setItem("fpson","1");
}
}
$(".asetting").hide();
$('#backer').hide();
$("#"+localStorage.getItem("themeColor")).attr("checked", true);
if(localStorage.getItem("blur")=="false"){
document.getElementById("blur").checked=true;
}
if(localStorage.getItem("yjjs")=="true"){
document.getElementById("yjjs").checked=true;
}
if(localStorage.getItem("fpson")=="1"){
document.getElementById("fpson").checked=true;
}


if(localStorage.getItem("sakurahide")=="false"){
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else if(localStorage.getItem("sakurahide")==null){
localStorage.setItem("sakurahide","false");
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else{
setTimeout(
stopp,1000);
isSakura=0;
}
if(localStorage.getItem("aplayerhide")=="false"){
document.getElementById("hideAplayer").checked=true;
}
else if(localStorage.getItem("aplayerhide")==null){
localStorage.setItem("aplayerhide","false");
document.getElementById("hideAplayer").checked=true;
}
else{
doStuff=function() {
flag=0;
try{
ap=aplayers[0];
ap.list;
flag=1;
}catch{
setTimeout(doStuff, 50);
return;
}
if(flag){
$(".aplayer-fixed").hide()
}
}
doStuff();

}

document.getElementsByClassName("reSettings")[0].onclick=function(){
localStorage.clear()
window.location.reload()
}

toggleWinbox=function(){
$("#settingWindow").fadeToggle();
if(document.getElementById("settingWindow").style.display!="none"){
document.getElementById("settingWindow").style.display="flex";
}
}
fullScreen=function() {
if (document.fullscreenElement) document.exitFullscreen()
else document.documentElement.requestFullscreen();
}
toggleAside=function(){
const $htmlDom = document.documentElement.classList
$htmlDom.contains('hide-aside')
? saveToLocal.set('aside-status', 'show', 2)
: saveToLocal.set('aside-status', 'hide', 2)
$htmlDom.toggle('hide-aside')
}
toggleAplayer=function(){
$(".aplayer-fixed").toggle()
if(localStorage.getItem("aplayerhide")=="true"){
localStorage.setItem("aplayerhide",false);
}
else{
localStorage.setItem("aplayerhide",true);
}
}
// position = $(window).scrollTop();
// $(window).scroll(function () {

// scroll = $(window).scrollTop();

// if (scroll > position) {
// document.getElementsByTagName("header")[0].style.transform="translateY(58px)";
// } else {


// document.getElementsByTagName("header")[0].style.transform="";

// }

// position = scroll;
// });
toggleSakuras=function(){
isSakura=!isSakura;
stopp(isSakura);
if(localStorage.getItem("sakurahide")=="true"){
localStorage.setItem("sakurahide",false);
}
else{
localStorage.setItem("sakurahide",true);
}
}
switchAside=function(){
if(left){
document.getElementById("aside-content").classList.add("right");
document.querySelector(".layout > div:first-child").classList.add("left");
localStorage.setItem("leftAside","false");
}
else{
document.getElementById("aside-content").className="aside-content";
document.querySelector(".layout > div:first-child").className="";
try{
document.querySelector("#recent-posts").className="recent-posts";
}catch(err){}localStorage.setItem("leftAside","true");}
left=!left;
}
left=1;
if(localStorage.getItem("leftAside")=="true"||localStorage.getItem("leftAside")==null){

}else{
switchAside();
}
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
document.getElementById("autoTheme").checked=true;
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
}
if(location.href.indexOf('posts')!=-1){
var xhr = new XMLHttpRequest();
var url = document.querySelector('#page-header').style.backgroundImage.split('url("')[1].split('")')[0];
xhr.open("GET","https://apis.yisous.xyz/api/imageColor?imgurl="+url, true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState===4) {
if(xhr.status===200) {
document.getElementById("themeColor").innerText=`:root{--lyx-theme:${xhr.responseText}!important}`;
}
}
}
}
toggleAutoTheme=()=>{
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
$("#con-mode").show();
}
else{
localStorage.setItem("autoTheme","true");
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
$("#con-mode").hide();
}
}
}
switchDarkMode = function () {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
};

新建css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*使用了Chrome105新特性has,兼容性不好qwq*/
.con-rightside{
height:50px!important;
width: 50px!important;
border-radius: 30px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
margin:10px;
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
.con-rightside i::before{
font-size:30px;
}
[data-theme="dark"] .con-rightside i::before{
color:white
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
@media screen and (max-width:600px){
.con-rightside i::before{
font-size: 16px;
}
.con-rightside{
height:20px!important;
width:20px!important;
}
}
@media screen and (max-width:768px){
#con-barrage{
display: none!important;
}
}
#setting-buttons{
display: flex;
flex-wrap: wrap;
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#setting-sides{
margin-left: auto;
}
#setting-sides{
white-space: nowrap;
}
#setting-sidesl{
display: flex;
}
.settings .content{
margin-left:20px;
}
.settings{
margin:15px
}
/* 开关 */
.settings input[type="checkbox"] {
width: 38px;
height: 20px;
position: relative;
border: 1px solid #000000;
background-color: #0000;
border-radius: 12px;
background-clip: content-box;
display: inline-block;
-webkit-appearance: none;
user-select: none;
outline: none;
transform: translateY(5px);}
[data-theme="dark"] .settings input[type="checkbox"] {
border: 1px solid white;
}
.settings input[type="checkbox"]:before {
content: '';
width: 12px;
height: 12px;
position: absolute;
top: 3px;
left: 5px;
border-radius: 10px;
background-color: #000;}
[data-theme="dark"] .settings input[type="checkbox"]:before{
background-color: white;
}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);border-color:var(--lyx-theme)}
.settings input[type="checkbox"]:checked:before {
left: 19px;background-color: white!important;}

.settings input[type="checkbox"] {
transition: border background-color box-shadow }
.settings input[type="checkbox"]:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);
/* transition: border ease 0.4s, background-color ease 1.2s; */
}.settings input[type="checkbox"]:checked:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked:hover{
opacity: 0.8;
}
.settings input[type="checkbox"]:active{
background-color: #666666!important;
border-color:#666666!important;
}
.settings input[type="checkbox"]:active::before{
background-color:white!important;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
position: fixed;
display: block;
width: 80%;
max-width: 800px;
left: 50%;
top: 50%;
max-height: 80%;
background-color: #ffffffdd;
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border: 1px solid var(--lyx-border);
padding:30px;
backdrop-filter: blur(10px);
-ms-transform-origin-y:translate(-50%,-50%);
-webkit-transform:translate(-50%,-50%);
-moz-transform:translate(-50%,-50%);
-ms-transform:translate(-50%,-50%);
-o-transform:translate(-50%,-50%);
z-index: 514;
display: none;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
display: none;
flex-direction: column;
}
.settingx{
width: 46%;
text-align: left;
font-size: 28px;
padding: 10px;
margin: 10px;
background-color: var(--lyx-light-grey);
opacity: 0.8;
border-radius: 10px;
}
.settingx:hover{
background-color: var(--lyx-gray);
}
.settingx i{
margin: 5px;
}
@media screen and (max-width:768px){
.settingx{
width:100%!important;
}
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#close-console{
text-align: right;
}
#stt,#close-console{
margin-left: auto;
}
#close-console:not(#close-console:hover){
color: var(--global-font-color);
}

然后在[blogRoot]/themes/butterfly/layout/includes/layout.pug中添加:

1
2
3
4
...
include ./rightside.pug
! =partial('includes/third-party/search/index', {}, {cache: true})
+ ! =partial('includes/setting',{}, {cache:false})

还要引入一些外挂css标签:

1
2
3
4
5
6
7
8
9
10
inject:
head:
- <style id="settingStyle"></style>
- <style id="css"></style>
- <style id="themeColor"></style>
...
bottom:
- <script type="text/javascript" src="https://gcore.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
...

butterfly\layout\includes\rightside.pug添加按钮

1
2
3
4
5
6
7
when 'comment'
if commentsJsLoad
a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment"))
i.fas.fa-comments
+ when 'bg'
+ button(type="button" title='切换背景' onclick="toggleWinbox()")
+ i.fas.fa-display

然后修改:

1
2
3
4
5
#rightside
- const { enable, hide, show } = theme.rightside_item_order
- const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside']
- - const showArray = enable ? show && show.split(',') : ['toc','chat','comment']
+ - const showArray = enable ? show && show.split(',') : ['toc','chat','comment','bg']

修改鼠标样式

致美化下载鼠标样式

在css中添加并修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* 全局默认鼠标指针 */
body,
html {
cursor: url('/self/img/cursors/mogu/normal.cur'),auto !important;
}
/* 悬停图片时的鼠标指针 */
img {
cursor: url('/self/img/cursors/mogu/normal.cur'), auto !important;
}
/* 悬停图片弹出窗口时的鼠标指针 */
.fancybox__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
.carousel__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择链接标签时的鼠标指针 */
a:hover,#site-name:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择代码框展开和复制按钮时的鼠标指针 */
.copy-button:hover,.expand:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选中输入框时的鼠标指针 */
input:hover, textarea:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停按钮时的鼠标指针 */
button:hover,.scroll-down-effects:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页脚链接标签(例如页脚徽标)时的鼠标指针 */
#footer-wrap a:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页码时的鼠标指针 */
#pagination .page-number:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停菜单栏时的鼠标指针 */
#nav .site-page:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停滚动条的鼠标指针(只对Chrome有效) */
::-webkit-scrollbar:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
/* 悬停评论按钮的鼠标指针(我使用的是Gitalk/Valine) */
.switch-btn,.switch-btn:before,.gt-user-inner,.gt-ico,.gt-user-name,.gt-btn,.vbtn,svg,.at_button{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停非链接文本时的鼠标指针 */
h1,h2,h3,h4,h5,h6,#subtitle,.content,.line,.post-content p,.post-content li{
cursor: url('/self/img/cursors/mogu/text.ani'), auto;
}
/* 悬停文章日期 */
.post-meta-date:hover,.post-meta-date-created:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
文章作者: gglss
文章链接: http://example.com/posts/54899.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
最新文章
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Butterfly美化记录 | GGLSS

Butterfly美化记录

注:这个魔改转载于Ariasakaの小窝

导航栏

分离菜单栏和搜索栏

让搜索栏放在最右侧,其他的导航栏居中

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
- if (theme.algolia_search.enable || theme.local_search.enable)
- #search-button
- a.site-page.social-icon.search
- i.fas.fa-search.fa-fw
- span=' '+_p('search.title')
!=partial('includes/header/menu_item', {}, {cache: true})
#nav-right
+ if (theme.algolia_search.enable || theme.local_search.enable)
+ #search-button
+ a.site-page.social-icon.search
+ i.fas.fa-search.fa-fw
- #toggle-menu
- a.site-page
- i.fas.fa-bars.fa-fw
+ #toggle-menu
+ a.site-page
+ i.fas.fa-bars.fa-fw

修改的文件nav.pug,版本为Butterfly 4.10.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
nav#nav
span#blog-info
a(href=url_for('/') title=config.title)
if theme.nav.logo
img.site-icon(src=url_for(theme.nav.logo))
if theme.nav.display_title
span.site-name=config.title

#menus
!=partial('includes/header/menu_item', {}, {cache: true})

#nav-right
if (theme.algolia_search.enable || theme.local_search.enable || theme.docsearch.enable)
#search-button
a.site-page.social-icon.search(href="javascript:void(0);")
i.fas.fa-search.fa-fw

#toggle-menu
a.site-page
i.fas.fa-bars.fa-fw

居中

使用自定义[blogRoot]/self/css/meihua.css,添加下面的代码

1
2
3
4
5
6
7
#nav-right{
flex:1 1 auto;
justify-content: flex-end;
margin-left: auto;
display: flex;
flex-wrap:nowrap;
}

去掉导航栏下的蓝色长条

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
#nav *::after{
background-color: transparent!important;
}

子菜单横向布局

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* ----------导航栏横向下拉框---------- */

.menus_item_child li:not(#sidebar-menus li){
float: left;
border-radius: 6px!important;
-webkit-border-radius: 6px!important;
-moz-border-radius: 6px!important;
-ms-border-radius: 6px!important;
-o-border-radius: 6px!important;
}
.menus_item_child:not(#sidebar-menus ul){
/*left:calc(-150%)!important;*//*这是估算值,为了保持元素居中的,如果不合适可以自己调*/
left:50%;
translate:-50%;
}

显示标题

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug

1
2
3
4
5
6
7
8
9
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
!=partial('includes/header/menu_item', {}, {cache: true})
+ center(id="name-container")
+ a(id="page-name" href="javascript:scrollToTop()") PAGE_NAME
...

[blogRoot]/self/js/创建jquery.js文件,添加以下代码

1
2
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});

然后添加nav.js,并且按照注释修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//js有一个小问题:就是只要鼠标滚动不论哪里都会响应,即便你滚动的是子元素

//2022.9.11 已修复,需要jq,请自行引入
document.getElementById("name-container").setAttribute("style", "display:none");

var position = $(window).scrollTop();

$(window).scroll(function () {

var scroll = $(window).scrollTop();

if (scroll > position) {


document.getElementById("name-container").setAttribute("style", "");
document.getElementsByClassName("menus_items")[1].setAttribute("style", "display:none!important");

} else {


document.getElementsByClassName("menus_items")[1].setAttribute("style", "");
document.getElementById("name-container").setAttribute("style", "display:none");

}

position = scroll;

});
function scrollToTop(){
document.getElementsByClassName("menus_items")[1].setAttribute("style","");
document.getElementById("name-container").setAttribute("style","display:none");
btf.scrollToDest(0, 500);
}
//修复没有弄右键菜单的童鞋无法回顶部的问题
document.getElementById("page-name").innerText = document.title.split(" | Ariasakaの小窝")[0];
/*这里是去掉你的网站全局名称的设置,如果你不需要去掉,你可以写成:
document.getElementById("page-name").innerText=document.title

或者把你的网站的分隔符和全局网站名称加上去*/

最后添加如下css,按照注释修改参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
2022.10.4更新:
根据我发现的没有自适应,间距不合理问题进行调整,如果用了这个的朋友们建议改一改
*/
#page-name::before{
font-size:18px;
position: absolute;
width:100%;
height:100%;
border-radius: 8px;
color:white!important;
top:0;
left:0;
content:'回到顶部';
background-color: var(--lyx-theme);
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
opacity: 0;
box-shadow: 0 0 3px var(--lyx-theme);
line-height: 45px; /*如果垂直位置不居中可以微调此值,也可以删了*/
}
#page-name:hover:before{
opacity: 1;
}
@media screen and (max-width:900px){
#page-name,#menus{
display:none!important;
}
}

#name-container{
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
#name-container:hover{
scale:1.03
}
#page-name{
position: relative;
padding:10px 30px/*如果文字间隔不合理可以微调修改,第二个是水平方向的padding,第一个是垂直的*/
}
#nav{
padding: 0 20px;
}

导航栏显示haver颜色

在自定义[blogRoot]/self/css/meihua.css里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* ----------修改导航栏的haver---------- */

.site-page {
padding: 5px;
margin: 3px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
.site-page:hover {
background-color: var(--gglss-theme);
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 5px;
}
.site-page.child:hover {
background-color: var(--gglss-theme)!important;
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 4px;
}

/* ----------网站标题部分的增强版---------- */
#site-name::before{
opacity: 0;
background-color: var(--gglss-theme)!important;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-ms-border-radius: 8px;
-o-border-radius: 8px;
transition: .3s;
-webkit-transition: .3s;
-moz-transition: .3s;
-ms-transition: .3s;
-o-transition: .3s;
position:absolute;
top:0!important;
right:0!important;
width:100%;
height:100%;
content: "\f015";
box-shadow: 0 0 5px var(--gglss-theme);
font-family: "Font Awesome 6 Free";
text-align: center;
color:white;
line-height:34px;/*如果有溢出或者垂直不居中的现象微调一下这个参数*/
font-size: 18px;/*根据个人喜好*/
}
#site-name:hover::before{
opacity: 1;
scale:1.03;
}
#site-name{
position: relative;
font-size: 24px; /*一定要把字体调大点,否则效果惨不忍睹!*/
}
:root{
--gglss-theme:#49B1F5 /*我的主题色*/
}

侧边栏分类归档美化

修改 aside_archives文件

打开 [you_blog]\themes\butterfly\scripts\helpers\aside_archives.js 修改第 92 行左右。

1
2
3
4
5
6
7
8
9
10
result += transform ? transform(item.name) : item.name
result += '</span>'

if (showCount) {
- result += `<span class="card-archive-list-count">${item.count}</span>`
+ result += `<div class="card-archive-list-count-group"><span class="card-archive-list-count">${item.count}</span><span>篇</span></div>`
}
result += '</a>'
result += '</li>'

增加css

在自定义[blogRoot]/self/css/meihua.css文件中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* 侧栏归档样式start */
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.5rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-count-group {
display: flex;
flex-direction: row;
align-items: baseline;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child {
width: fit-content;
margin-left: 4px;
}
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.1rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-date {
font-size: 14px;
opacity: 0.6;
}
li.card-category-list-item {
flex: 0 0 31%;
}
li.card-archive-list-item {
flex: 0 0 48%;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
color: #fff;
/* background-color: #3b70fc; */
background-color: #49B1F5; /*侧边栏的鼠标悬浮颜色*/
box-shadow: 0 8px 12px -3px #4259ef23;
border-radius: 8px;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
@media screen and (min-width: 1300px) {
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
transform: scale(1.03);
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:active {
transform: scale(0.97);
}
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a {
border-radius: 8px;
margin: 4px 0;
display: flex;
flex-direction: column;
align-content: space-between;
border: 1px solid #e3e8f7;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child {
width: auto;
flex: inherit;
}
#aside-content .card-archives ul.card-archive-list,
#aside-content .card-categories ul.card-category-list {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
}
/* 侧栏归档样式end */

添加夜间模式的转换动画

转自雷雷屋头

新建 sun_moon.pug

[you_blog]\themes\butterfly\layout\includes\custom\ 文件夹下,新建 sun_moon.pug 文件

1
2
3
4
5
6
7
8
9
10
11
svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0')
symbol#icon-sun(viewBox='0 0 1024 1024')
path(d='M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z', fill='#FFD878', p-id='8420')
path(d='M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z', fill='#FFE4A9', p-id='8421')
path(d='M512 109.248L626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z', fill='#4D5152', p-id='8422')
path(d='M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z', fill='#4D5152', p-id='8423')
symbol#icon-moon(viewBox='0 0 1024 1024')
path(d='M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z', fill='#FFB531', p-id='11345')
path(d='M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z', fill='#030835', p-id='11346')


新建css

[blogRoot]/self/css/新建sun_moon.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* 白天夜晚切换动画start */
.Cuteen_DarkSky, .Cuteen_DarkSky:before {
content: '';
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 88888888;
}
.Cuteen_DarkSky {
background: linear-gradient(#feb8b0, #fef9db);
}
.Cuteen_DarkSky:before {
transition: 2s ease all;
opacity: 0;
background: linear-gradient(#4c3f6d, #6c62bb, #93b1ed);
}
.DarkMode .Cuteen_DarkSky:before {
opacity: 1;
}
.Cuteen_DarkPlanet {
z-index: 99999999;
position: fixed;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
-webkit-animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
transform-origin: center bottom;
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.Cuteen_DarkPlanet:after {
position: absolute;
left: 35%;
top: 40%;
width: 9.375rem;
height: 9.375rem;
border-radius: 50%;
content: '';
background: linear-gradient(#fefefe, #fffbe8);
}
.search span {
display: none;
}
.menus_item a {
text-decoration: none !important;
}
.icon-V {
padding: 5px;
}
@-moz-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-o-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
/* 白天夜晚切换动画end */


新建js

[blogRoot]/self/js/新建`sun_moon.js,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 白天夜晚切换动画start
function switchNightMode() {
document.querySelector('body').insertAdjacentHTML('beforeend', '<div class="Cuteen_DarkSky"><div class="Cuteen_DarkPlanet"></div></div>'),
setTimeout(function() {
document.querySelector('body').classList.contains('DarkMode') ? (document.querySelector('body').classList.remove('DarkMode'), localStorage.setItem('isDark', '0'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')) : (document.querySelector('body').classList.add('DarkMode'), localStorage.setItem('isDark', '1'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')),
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].style.transition = 'opacity 3s';
document.getElementsByClassName('Cuteen_DarkSky')[0].style.opacity = '0';
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].remove();
}, 1e3);
}, 2e3)
})
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
document.querySelector('body').classList.add('DarkMode'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
}
// 白天夜晚切换动画end


引用 sun_moon.pug

修改 [you_blog]\themes\butterfly\layout\includes\head.pug, 在文件末位增加以下代码:

1
2
3
4
5
6
7
8
9
10
11
  //- global config
!=partial('includes/head/config', {}, {cache: true})

include ./head/config_site.pug
include ./head/noscript.pug

!=fragment_cache('injectHeadJs', function(){return inject_head_js()})

!=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
+ include ./custom/sun_moon.pug

替换昼夜切换按钮

修改[you_blog]\themes\butterfly\layout\includes\rightside.pug, 替换原本的昼夜切换按钮

1
2
3
4
5
6
7
8
9
10
11
  when 'translate'
if translate.enable
button#translateLink(type="button" title=_p('rightside.translate_title'))= translate.default
when 'darkmode'
if darkmode.enable && darkmode.button
- button#darkmode(type="button" title=_p('rightside.night_mode_title'))
- i.fas.fa-adjust
+ a.icon-V.hidden(onclick='switchNightMode()', title=_p('rightside.night_mode_title'))
+ svg(width='25', height='25', viewBox='0 0 1024 1024')
+ use#modeicon(xlink:href='#icon-moon')

为博客添加波浪效果

修改index.pug文件

修改themes/butterfly/layout/includes/header/index.pug,在第 38 行左右

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if top_img !== false
if is_post()
include ./post-info.pug
+ section.main-hero-waves-area.waves-area
+ svg.waves-svg(xmlns='http://www.w3.org/2000/svg', xlink='http://www.w3.org/1999/xlink', viewBox='0 24 150 28', preserveAspectRatio='none', shape-rendering='auto')
+ defs
+ path#gentle-wave(d='M -160 44 c 30 0 58 -18 88 -18 s 58 18 88 18 s 58 -18 88 -18 s 58 18 88 18 v 44 h -352 Z')
+ g.parallax
+ use(href='#gentle-wave', x='48', y='0')
+ use(href='#gentle-wave', x='48', y='3')
+ use(href='#gentle-wave', x='48', y='5')
+ use(href='#gentle-wave', x='48', y='7')
#post-top-cover
img#post-top-bg(class='nolazyload' src=bg_img)
else if is_home()
#site-info
h1#site-title=site_title
if theme.subtitle.enable

添加css

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 波浪css */
.main-hero-waves-area {
width: 100%;
position: absolute;
left: 0;
bottom: -11px;
z-index: 5;
}
.waves-area .waves-svg {
width: 100%;
height: 5rem;
}
/* Animation */

.parallax > use {
animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
}
.parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #f7f9febd;
}
.parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #f7f9fe82;
}
.parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #f7f9fe36;
}
.parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #f7f9fe;
}
/* 黑色模式背景 */
[data-theme="dark"] .parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #18171dc8;
}
[data-theme="dark"] .parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #18171d80;
}
[data-theme="dark"] .parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #18171d3e;
}
[data-theme="dark"] .parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #18171d;
}

@keyframes move-forever {
0% {
transform: translate3d(-90px, 0, 0);
}
100% {
transform: translate3d(85px, 0, 0);
}
}
/*Shrinking for mobile*/
@media (max-width: 768px) {
.waves-area .waves-svg {
height: 40px;
min-height: 40px;
}
}

注意: 的是 css 中fill属性可以控制波浪颜色

页脚透明

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 页脚透明start */
#footer {
background: var(--icat-footer-background);
}

#footer #footer-wrap {
color: var(--font-color)
}

#footer #footer-wrap a {
color: var(--font-color)
}

/* 页脚透明end */

文章页版权样式美化

[blogRoot]/self/css/meihua.css,增加下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 版权样式调整start */
#post .post-copyright {
background: var(--icat-card-bg);
padding: 1rem 1.3rem;
overflow: hidden;
border: var(--style-border);
border-width: 1px;
transition: 0.3s;
position: relative;
margin: 1.5rem 0px 0.5rem;
border-radius: 8px;
}
#post .post-copyright:before {
position: absolute;
right: 22px;
top: -77px;
content: "\e039";
font-size: 180px;
font-family: "iconfont";
color: var(--icat-fontcolor);
opacity: 0.1;
filter: blur(7px);
}
/* 版权样式调整end */

分类页和标签页面添加Bar条

使用justlovesmile

新增pug文件

新增categoryBar.pug文件

首先是分类条,在themes/butterfly/layout/includes/处新建文件categoryBar.pug

1
2
3
4
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("category")
a.category-bar-more(href="/categories/") 更多

新增tarsBar.pug文件

其次是标签条,在themes/butterfly/layout/includes/处新建文件tagBar.pug,因为样式一样,所以没有更改id和class名称。

1
2
3
4
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("tag")
a.category-bar-more(href="/tags/") 更多

新建Hexo辅助函数

theme/butterfly/scripts/helpers/中创建get_arrays.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
hexo.extend.helper.register('getarray_bar', function (types) {
if (!types) {
types = "category"
}
const categoriesBar = function (categories) {
if (!categories || !categories.length) return ``
const categoryArr = []
hexo.locals.get('categories').map(function (category) {
categoryArr.push({ name: category.name, value: category.length })
})
categoryArr.sort((a, b) => { return b.value - a.value })
let strCategoriesBar = ``
for (let i = 0; i < categories.length; i++) {
strTemp=`
<div class="category-bar-item" id="${categoryArr[i].name}">
<a href="/categories/${categoryArr[i].name}/">${categoryArr[i].name}</a>
</div>`
strCategoriesBar+=strTemp
}
return strCategoriesBar
}
const tagsBar = function(tags) {
if (!tags || !tags.length) return ``
const tagArr = []
hexo.locals.get('tags').map(function (tag) {
tagArr.push({ name: tag.name, value: tag.length })
})
tagArr.sort((a, b) => { return b.value - a.value })
let strTagsBar = ``
for (let i = 0; i < tags.length; i++) {
strTemp=`
<div class="category-bar-item" id="${tagArr[i].name}">
<a href="/tags/${tagArr[i].name}/">${tagArr[i].name}</a>
</div>`
strTagsBar+=strTemp
}
return strTagsBar
}
if (types == "category"){
return categoriesBar(this.site.categories)
}
if (types == "tag"){
return tagsBar(this.site.tags)
}
})

在页面引用模块

在分类页面引用:找到theme/butterfly/layout/category.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extends includes/layout.pug

block content
if theme.category_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts.category_ui
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#category
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-folder-open
+ include includes/categoryBar.pug
.article-sort-title= _p('page.category') + ' - ' + page.category
+articleSort(page.posts)
include includes/pagination.pug

在标签页引用:找到theme/butterfly/layout/tag.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extends includes/layout.pug

block content
if theme.tag_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#tag
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-tags
+ include includes/tagBar.pug
.article-sort-title= _p('page.tag') + ' - ' + page.tag
+articleSort(page.posts)
include includes/pagination.pug

引入js和css文件

在自定义的js里面添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// -----------分类条的js-----------
categoriesBarActive()
topCategoriesBarScroll()
tagsBarActive()

//分类条
function categoriesBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#category-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/categories\/.*?\//;
var patbool = pattern.test(urlinfo);
console.log(patbool);
// 获取当前的分类
if (patbool) {
var valuegroup = urlinfo.split("/");
console.log(valuegroup[2]);
// 获取当前分类
var nowCategorie = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowCategorie).classList.add("select");
}
}
}

}

//鼠标控制横向滚动
function topCategoriesBarScroll(){
if (document.getElementById("category-bar-items")){
let xscroll = document.getElementById("category-bar-items");
xscroll.addEventListener("mousewheel", function (e) {
//计算鼠标滚轮滚动的距离
let v = -e.wheelDelta / 2;
xscroll.scrollLeft += v;
//阻止浏览器默认方法
e.preventDefault();
}, false);
}
}

// -----------标签条的js-----------
//标签条
function tagsBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
//console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#tags-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/tags\/.*?\//;
var patbool = pattern.test(urlinfo);
//console.log(patbool);
// 获取当前的标签
if (patbool) {
var valuegroup = urlinfo.split("/");
//console.log(valuegroup[2]);
// 获取当前分类
var nowTag = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowTag).classList.add("select");
}
}
}
}

修改导航栏一闪的问题

使用的安知鱼

修改main.js

修改顶栏一闪而过的 bug 修改本地themes/butterfly/source/js/main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  window.scrollCollect = () => {
return btf.throttle(function (e) {
const currentTop = window.scrollY || document.documentElement.scrollTop
const isDown = scrollDirection(currentTop)
if (currentTop > 56) {
+ $header.classList.add('is-top-bar')
if (isDown) {
if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible')
if (isChatBtnShow && isChatShow === true) {
chatBtnHide()
isChatShow = false
}
} else {
if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible')
if (isChatBtnHide && isChatShow === false) {
chatBtnShow()
isChatShow = true
}
}
$header.classList.add('nav-fixed')
if (window.getComputedStyle($rightside).getPropertyValue('opacity') === '0') {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
} else {
if (currentTop === 0) {
- $header.classList.remove('nav-fixed', 'nav-visible')
+ $header.classList.remove('is-top-bar')
}
$rightside.style.cssText = "opacity: ''; transform: ''"
}

if (document.body.scrollHeight <= innerHeight) {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
}, 200)()
}

侧边栏最近文章梅花

修改index.pug布局

去除首页最近文章显示,改为文章页显示,修改themes/butterfly/layout/includes/widget/index.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
else
//- page
!=partial('includes/widget/card_author', {}, {cache: true})
!=partial('includes/widget/card_announcement', {}, {cache: true})
!=partial('includes/widget/card_top_self', {}, {cache: true})

.sticky_layout
if showToc
include ./card_post_toc.pug

//- !=partial('includes/widget/card_recent_post', {}, {cache: true}) //- 注释掉最近文章

!=partial('includes/widget/card_ad', {}, {cache: true})
!=partial('includes/widget/card_newest_comment', {}, {cache: true})
!=partial('includes/widget/card_categories', {}, {cache: true})
!=partial('includes/widget/card_tags', {}, {cache: true})

添加css美化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#aside-content .aside-list > .aside-list-item .content > time {
display: none;
}
#aside-content .aside-list > .aside-list-item .content > .title {
-webkit-line-clamp: 3;
font-weight: 700;
padding: 2px 0;
}
#aside-content .aside-list > .aside-list-item {
padding: 8px;
padding-top: 6px !important;
padding-bottom: 6px !important;
border-radius: 12px;
transition: 0.3s;
margin: 4px 0;
cursor: pointer;
}
@media screen and (min-width: 1300px) {
#aside-content .aside-list > .aside-list-item:hover {
transform: scale(1.03);
}
#aside-content .aside-list > .aside-list-item:active {
transform: scale(0.97);
}
}
#aside-content .aside-list > .aside-list-item:hover .thumbnail > img {
transform: scale(1);
}
#aside-content .aside-list > .aside-list-item:not(:last-child) {
border-bottom: 0 dashed var(--anzhiyu-background) !important;
}
#aside-content .aside-list > .aside-list-item .thumbnail {
border-radius: 8px;
border: var(--style-border);
}
#aside-content .aside-list > .aside-list-item:hover {
background: var(--anzhiyu-blue-main);
color: var(--anzhiyu-white);
transition: 0.3s;
box-shadow: var(--anzhiyu-shadow-main);
}
#aside-content .aside-list > .aside-list-item:hover a {
color: var(--anzhiyu-white) !important;
}
.card-widget.card-recent-post {
padding: 0.4rem 0.6rem !important;
}

文章页H1-H6添加小风车

使用的安知鱼

修改主题配置文件

1
2
3
4
5
6
beautify:
enable: true
field: post # site/post
# title-prefix-icon: '\f0c1' 原内容
title-prefix-icon: '\f863'
title-prefix-icon-color: "#F47466"

让小风车转起来

在自定义 [blog]/source/self/css/custom.css 文件中,加入以下代码即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* 文章页H1-H6图标样式效果 */
h1::before,
h2::before,
h3::before,
h4::before,
h5::before,
h6::before {
-webkit-animation: ccc 1.6s linear infinite;
animation: ccc 1.6s linear infinite;
}
@-webkit-keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
@keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}

小风车的颜色和大小

修改小风车的颜色和大小,加入下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#content-inner.layout h1::before {
color: #ef50a8;
margin-left: -1.55rem;
font-size: 1.3rem;
margin-top: -0.23rem;
}
#content-inner.layout h2::before {
color: #fb7061;
margin-left: -1.35rem;
font-size: 1.1rem;
margin-top: -0.12rem;
}
#content-inner.layout h3::before {
color: #ffbf00;
margin-left: -1.22rem;
font-size: 0.95rem;
margin-top: -0.09rem;
}
#content-inner.layout h4::before {
color: #a9e000;
margin-left: -1.05rem;
font-size: 0.8rem;
margin-top: -0.09rem;
}
#content-inner.layout h5::before {
color: #57c850;
margin-left: -0.9rem;
font-size: 0.7rem;
margin-top: 0rem;
}
#content-inner.layout h6::before {
color: #5ec1e0;
margin-left: -0.9rem;
font-size: 0.66rem;
margin-top: 0rem;
}

小风车hover效果

设置鼠标碰到标题时,小风车跟随标题变色,且像是被光标阻碍了,转速变慢。鼠标离开恢复转速。也可以设置为 none 鼠标碰到停止转动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#content-inner.layout h1:hover,
#content-inner.layout h2:hover,
#content-inner.layout h3:hover,
#content-inner.layout h4:hover,
#content-inner.layout h5:hover,
#content-inner.layout h6:hover {
color: #3b70fc;
}
#content-inner.layout h1:hover::before,
#content-inner.layout h2:hover::before,
#content-inner.layout h3:hover::before,
#content-inner.layout h4:hover::before,
#content-inner.layout h5:hover::before,
#content-inner.layout h6:hover::before {
color: #3b70fc;
-webkit-animation: ccc 3.2s linear infinite;
animation: ccc 3.2s linear infinite;
}

右下角设置 icon 转的太快了,让它慢一点吧。继续添加:

1
2
3
4
/* 页面设置icon转动速度调整 */
#rightside_config i.fas.fa-cog.fa-spin {
animation: fa-spin 5s linear infinite;
}

文章加密

安装插件

通过插件,实现文章输入密码才能浏览

1
npm install hexo-blog-encrypt --save

修改文章

在文章头部加入

1
2
3
4
5
---
title: 加密文章测试,输入test即可查看
password: test
message: 测试加密,这里的密码是:test
---

文章增加最新文章标识

转载于云端

修改page.js

在js文件里面添加一段js

1
2
3
4
5
6
7
8
9
// 最新文章
hexo.extend.helper.register('newPost', function() {
let name, time;
hexo.locals.get('posts').map((item, index) => {
if (index == 0) name = item.title, time = item.date
else if (item.date > time) { name = item.title, time = item.date }
});
return name
})

修改post-ui.pug

themes\butterfly\layout\includes\mixins\post-ui.pug 添加代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mixin postUI(posts)
+ - let newTitle= newPost()
each article , index in page.posts.data
.recent-post-item
-
let link = article.link || article.path
let title = article.title || _p('no_title')
const position = theme.cover.position
let leftOrRight = position === 'both'
? index%2 == 0 ? 'left' : 'right'
: position === 'left' ? 'left' : 'right'
let post_cover = article.cover
let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : ''
-
if post_cover && theme.cover.index_enable
.post_cover(class=leftOrRight)
a(href=url_for(link) title=title)
img.post_bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
+ if newTitle == title
+ span(class=`newPost-${leftOrRight=='left'?'right':'left'}`) 最新

添加自定义CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#recent-posts>.recent-post-item {
position: relative;
}

/* 最新文章图标 */
.newPost-left,
.newPost-right {
position: absolute;
top: 0;
color: white;
padding: 0 15px;
background-color: #49b1f5;
border-radius: 0 0 10px 10px;
}

.newPost-left {
left: 15px;
}

.newPost-right {
right: 15px;
}

hexo加速

使用[akilar](使用gulp压缩博客静态资源 | Akilarの糖果屋)教程

安装Gulp插件

在博客根目录[Blogroot]打开终端,输入:

1
2
npm install --global gulp-cli #全局安装gulp指令集
npm install gulp --save #安装gulp插件

安装各个下属插件以实现对各类静态资源的压缩

  • 压缩HTML:
1
2
3
npm install gulp-htmlclean --save-dev
npm install gulp-html-minifier-terser --save-dev
# 用gulp-html-minifier-terser可以压缩HTML中的ES6语法
  • 压缩CSS:
1
npm install gulp-clean-css --save-dev
  • 压缩JS:
1
npm install gulp-terser --save-dev
  • 压缩字体包:
1
npm install gulp-fontmin --save-dev

为Gulp创建gulpfile.js任务脚本

在博客根目录[Blogroot]下新建gulpfile.js,打开[Blogroot]\gulpfile.js,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//用到的各个插件
var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var fontmin = require('gulp-fontmin');
// gulp-tester
var terser = require('gulp-terser');
// 压缩js
gulp.task('compress', async() =>{
gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(terser())
.pipe(gulp.dest('./public'))
});
//压缩css
gulp.task('minify-css', () => {
return gulp.src(['./public/**/*.css'])
.pipe(cleanCSS({
compatibility: 'ie11'
}))
.pipe(gulp.dest('./public'));
});
//压缩html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true, //清除html注释
collapseWhitespace: true, //压缩html
collapseBooleanAttributes: true,
//省略布尔属性的值,例如:<input checked="true"/> ==> <input />
removeEmptyAttributes: true,
//删除所有空格作属性值,例如:<input id="" /> ==> <input />
removeScriptTypeAttributes: true,
//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,
//删除<style>和<link>的 type="text/css"
minifyJS: true, //压缩页面 JS
minifyCSS: true, //压缩页面 CSS
minifyURLs: true //压缩页面URL
}))
.pipe(gulp.dest('./public'))
});
//压缩字体
function minifyFont(text, cb) {
gulp
.src('./public/fonts/*.ttf') //原字体所在目录
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest('./public/fontsdest/')) //压缩后的输出目录
.on('end', cb);
}

gulp.task('mini-font', (cb) => {
var buffers = [];
gulp
.src(['./public/**/*.html']) //HTML文件所在目录请根据自身情况修改
.on('data', function(file) {
buffers.push(file.contents);
})
.on('end', function() {
var text = Buffer.concat(buffers).toString('utf-8');
minifyFont(text, cb);
});
});
// 运行gulp命令时依次执行以下任务
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html','mini-font'
#))

在每次运行完hexo generate生成静态页面后,运行gulp对其进行压缩。指令流程如下:

1
2
3
4
hexo clean
hexo generate
gulp
hexo server 或 hexo deploy

手机端悬浮窗

使用akilar教程

新建[Blogroot]\themes\butterfly\source\js\custom\fixed_card_widget.js,用来控制显隐逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 固定卡片点击动作
function FixedCardWidget(type,name,index){
// 根据id或class选择元素
if (type === "id"){
var tempcard = document.getElementById(name);
}
else{
var tempcard = document.getElementsByClassName(name)[index];
}
// 若元素存在
if (tempcard) {
// 首先判断是否存在fixed-card-widget类
if (tempcard.className.indexOf('fixed-card-widget') > -1){
// 存在则移除
RemoveFixedCardWidget();
}
else{
// 不存在则先初始化防止卡片叠加
RemoveFixedCardWidget();
//新建退出蒙版
CreateQuitBox();
// 再添加固定卡片样式
tempcard.classList.add('fixed-card-widget');
}
}
}
//创建一个蒙版,作为退出键使用
function CreateQuitBox(){
var quitBox = `<div id="quit-box" onclick="RemoveFixedCardWidget()"></div>`
var asideContent = document.getElementById('aside-content');
asideContent.insertAdjacentHTML("beforebegin",quitBox)
}
// 移除卡片方法
function RemoveFixedCardWidget(){
var activedItems = document.querySelectorAll('.fixed-card-widget');
if (activedItems) {
for (i = 0; i < activedItems.length; i++) {
activedItems[i].classList.remove('fixed-card-widget');
}
}
//移除退出蒙版
var quitBox = document.getElementById('quit-box');
if (quitBox) quitBox.remove();
}
// 常规先初始化,确保切换页面后不会有固定卡片留存
RemoveFixedCardWidget()

新建[Blogroot]\themes\butterfly\source\css\_layout\fixed_card_widget.styl,此处使用stylus交给插件编译,能够更快捷的适配多种内核样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// 垂直居中卡片样式(排除toc目录卡片)
.fixed-card-widget
&:not(#card-toc)
visibility visible!important
display block!important
position fixed!important
bottom 0
left 0
top 0
right 0
margin auto
margin-bottom auto!important
margin-top auto!important
max-width 300px
max-height 500px
width auto
height auto
overflow-y: scroll
z-index 999
animation rotateX 0.5s ease
animation-fill-mode forwards
&::-webkit-scrollbar
width: 0
// 针对说说卡片做样式兼容适配
.card-shuo
&.fixed-card-widget
#artitalk_main
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
#operare_artitalk
.c2
z-index 1000
// 针对标签卡片做样式兼容适配
.card-tags
&.fixed-card-widget
.card-tag-cloud
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
// 控制手机端可见
@media screen and (max-width: 768px)
div#fixedcard-dashboard
display flex!important
// 侧栏悬浮按钮样式
div#fixedcard-dashboard
position fixed
top 150px
width fit-content
height 40px
opacity 0.3
transition all 0.5s
display none
background rgba(255,255,255,0.9)
padding 5px 10px
border-top-right-radius 20px
border-bottom-right-radius 20px
z-index 1000
&:hover
opacity 1
button
&.fixedcard-activebtn
width 30px
opacity 1
pointer-events all
// 按钮样式
button
&.fixedcard-activebtn
width 0px
height 30px
transition all .5s
display flex
opacity 0
align-items center
justify-content space-around
pointer-events none
color #757273
// 悬浮按钮头像
.fixedcard-user-avatar
display inline-block
img
&.fixedcard-user-avatar-img
width 30px
height 30px
border-radius 50%
// 悬浮按钮夜间模式适配
[data-theme="dark"]
div#fixedcard-dashboard
background rgba(55,55,55,0.9)
button
&.fixedcard-activebtn
color #bcbdbd

// 卡片开启动画效果
@keyframes rotateX
from
transform rotateX(90deg)
to
transform rotateX(0deg)
// 退出蒙版效果
div#quit-box
position fixed
display block
left 0
top 0
width 100vh
height 100vh
z-index 99
background rgba(25,25,25,0.3)


[data-theme="dark"]
div#quit-box
background rgba(147, 146, 128, 0.3)

新建[Blogroot]\themes\butterfly\layout\includes\custom\fixed_card_widget.pug,以后的源码魔改教程都会尽量将改动文件归纳到带custom字样的文件夹里,便于管理魔改文件。

1
2
3
4
5
6
7
8
9
10
11
12
#fixedcard-dashboard
if is_post()
each poitem in theme.fixed_card_widget.post
button.fixedcard-activebtn(type="button" title=poitem.title onclick=`FixedCardWidget("` + poitem.type + `","` + poitem.name + `","` + poitem.index + `")`)
i(class=poitem.icon)
else
each paitem in theme.fixed_card_widget.page
button.fixedcard-activebtn(type="button" title=paitem.title onclick=`FixedCardWidget("` + paitem.type + `","` + paitem.name + `","` + paitem.index + `")`)
i(class=paitem.icon)
.fixedcard-user-avatar.fixedcard-activebtn(onclick="RemoveFixedCardWidget()")
img.fixedcard-user-avatar-img(src=url_for(theme.avatar.img) title=config.author)

修改[Blogroot]\themes\butterfly\layout\includes\additional-js.pug,直接加在文件末尾即可,但是注意缩进!

1
2
3
4
  if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async data-pjax src=url_for(theme.CDN.busuanzi))
+ if !theme.aside.mobile && theme.fixed_card_widget.enable
+ include ./custom/fixed_card_widget.pug

因为还做了page和post页面不同悬浮按钮的配置,为了让它能够自动切换而不是惰性加载,需要修改[Blogroot]\themes\butterfly\layout\includes\third-party\pjax.pug大约第十四行的位置,在pjax选择器中加入悬浮按钮的id。

1
2
3
4
5
6
7
8
9
10
  script.
let pjaxSelectors = [
'title',
'#config-diff',
'#body-wrap',
'#rightside-config-hide',
'#rightside-config-show',
+ "#fixedcard-dashboard",
'.js-pjax'
]

修改[Blogroot]\_config.butterfly.yml,新增配置项,此处的选择器其实就是提取了document.getElementsByClassName("name")[index]document.getElementById("name")这两个方法中的参数来确保能够找到侧栏卡片。原本其实是可以做成自动根据侧栏生成的,但是考虑到还有插件挂载和自定义卡片,以及还有部分用户会刻意隐藏一些侧栏卡片,所以干脆还是让用户自己去配置想要加到菜单的卡片好了。
找id或者class的办法很简单,用F12开启控制台,用左上角的元素选择器点选想要的侧栏卡片,在源码栏找到对应的class或者id。因为class是可以重名的,所以还存在一个序列问题,从0开始计数。此处为了避免语意混乱,建议还是用特征明显的class或者id来选择对应卡片。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#侧栏悬浮卡片控制按钮
#https://akilar.top/posts/451ac5f8/
fixed_card_widget:
enable: true
page: #页面显示按钮
- type: class #侧栏卡片选择器类型
name: card-info #侧栏卡片选择器名称
index: 0 #侧栏卡片选择器序列
icon: fas fa-address-book #图标
title: 用户信息 #悬停显示提示
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-shuo
index: 0
icon: fas fa-comments
title: 碎碎念
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
- type: id
name: card-newest-comments
index: 0
icon: fas fa-comment-dots
title: 最新评论
- type: class
name: card-tags
index: 0
icon: fas fa-tags
title: 标签
- type: class
name: card-webinfo
index: 0
icon: fas fa-chart-line
title: 网站咨询
post: #文章页显示按钮
- type: class
name: card-info
index: 0
icon: fas fa-address-book
title: 用户信息
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章

修改[Blogroot]_config.butterfly.yml的inject配置项

1
2
3
4
5
 inject:
head:

bottom:
+ - <script data-pjax defer src="/js/custom/fixed_card_widget.js"></script>

注意要关闭手机端显示侧栏卡片才能启用fixed卡片样式。

1
2
3
4
5
6
7
  aside:
enable: true
hide: false
button: true
- mobile: true # display on mobile
+ mobile: false # display on mobile
position: right # left or right

设置弹窗

这个功能使用的注:这个魔改使用了Ariasakaの小窝Leonus的教程

新建setting.pug文件

[blogRoot]/themes\acryple\layout\includes\setting.pug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
html
body
#settingWindow.js-pjax
span.setting-title
span#stt 控制面板
a(id="close-console" onclick="toggleWinbox();") ×
button#backer(onclick='$(\'.asetting\').hide();$(\'.settingx\').show();$(\'#backer\').hide()')
i.fa.fa-chevron-left
span 返回
.settings
#setting-buttons
button.settingx(onclick='$(\'#theme-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fas.fa-layer-group
span 外观
button.settingx(onclick='$(\'#font-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-font
span 字体
button.settingx(onclick='$(\'#background-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.far.fa-image
span 背景
button.settingx(onclick='$(\'#con-echarts\').show();$(\'.settingx\').hide();$(\'#backer\').show();var evt = document.createEvent("HTMLEvents");evt.initEvent("resize", false, false);window.dispatchEvent(evt);')
i.fas.fa-chart-pie
span 统计
button.settingx(onclick='$(\'#con-abouts\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-cloud-download
span 关于
#setting-hides
#theme-settings.asetting
h2.content-head 性能设置
p
.content(style='display:flex')
input#blur(type='checkbox', onclick='setBlur()')
.content-text 禁用模糊效果
//- .content(style='display:flex')
//- input#yjjs(type='checkbox', onclick='yjjs1()')
//- .content-text 硬件加速
.content(style='display:flex')
input#fpson(type='checkbox', onclick='fpssw()' style="flex-shrink: 0")
.content-text
span 开启帧率检测(
a(href='javascript:window.location.reload()') 刷新
span 后生效)
p
h2.content-head 主题设置
//- .content(style='display:flex')
//- input#hideAside(type='checkbox', onclick='toggleRightside()')
//- .content-text 隐藏侧边栏
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleAplayer()')
.content-text 显示aplayer
.content(style='display:flex')
input#hideSakura(type='checkbox', onclick='toggleSakuras()')
.content-text 落樱特效
.content(style='display:flex')
input#autoTheme(type='checkbox', onclick='toggleAutoTheme()')
.content-text 明暗模式自动切换
.content(style='display:flex')
input#autoColor(type='checkbox', onclick='autoColor()')
.content-text 自动主题色(跟随文章封面)
| 未完工
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleNav()')
.content-text 固定导航栏
| ###
.content(style='display:flex')
button.content-button(onclick='switchTheme()') 切换主题

p
h3.content-head 主题色
#themeColorSettings.content(style='display:flex')
input#red(type='radio', name='colors', onclick='setColor(\'red\')')
input#orange(type='radio', name='colors', onclick='setColor(\'orange\')')
input#yellow(type='radio', name='colors', onclick='setColor(\'yellow\')')
input#green(type='radio', name='colors', onclick='setColor(\'green\')')
input#blue(type='radio', name='colors', onclick='setColor(\'blue\')')
input#heoblue(type='radio', name='colors', onclick='setColor(\'heoblue\')')
input#darkblue(type='radio', name='colors', onclick='setColor(\'darkblue\')')
input#purple(type='radio', name='colors', onclick='setColor(\'purple\')')
input#pink(type='radio', name='colors', onclick='setColor(\'pink\')', checked)
input#black(type='radio', name='colors', onclick='setColor(\'black\')')
input#blackgray(type='radio', name='colors', onclick='setColor(\'blackgray\')')
#font-settings.asetting
h2.content-head 字体设置
p#swfs
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYTMR\'!important;color:black', onclick='setFont(\'HYTMR\')') 汉仪唐美人
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYPailou\'!important;color:black', onclick='setFont(\'HYPailou\')') 汉仪新蒂牌楼
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXJLJ\'!important;color:black', onclick='setFont(\'FZXJLJ\')') 方正金陵体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXS\'!important;color:black', onclick='setFont(\'FZXS\')') 方正像素体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'ZhuZiAWan\'!important;color:black', onclick='setFont(\'ZhuZiAWan\')') 筑紫A丸ゴシック
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZODZK\'!important;color:black', onclick='setFont(\'FZODZK\')') 方正欧蝶正楷
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Serif\'!important;color:black', onclick='setFont(\'Source Serif\')') 思源宋体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Sans\'!important;color:black', onclick='setFont(\'Source Sans\')') 思源黑体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:-apple-system, IBM Plex Mono ,monosapce,\'微软雅黑\', sans-serif;', onclick='setFont(\'main\')') 系统默认
br
#background-settings.asetting
h2(style='margin-left:10px') 背景设置
div
span 注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效
button.content-button(onclick='localStorage.removeItem(\'blogbg\');location.reload();')
i.fa-solid.fa-arrows-rotate
span 点我恢复默认背景
button.content-button(onclick='switchTheme()') 切换主题
h3 图片(手机)
.bgbox
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)\')')
h3 图片(电脑)
.bgbox
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)\')')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aea549be6.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aea549be6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aec701a68.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aec701a68.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aef4a5543.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aef4a5543.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324af3622884.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324af3622884.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/12/08/6391b77ed767c.png)\')')
img(src='https://bu.dusays.com/2022/12/08/6391b77ed767c.png')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp')
h3 渐变色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #B7D31E, #42CE1E)', onclick='changeBg(\'linear-gradient(to right, #B7D31E, #42CE1E)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #06DE86, #06A5DE)', onclick='changeBg(\'linear-gradient(to right, #06DE86, #06A5DE)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #189BC4, #183DC4)', onclick='changeBg(\'linear-gradient(to right, #189BC4, #183DC4)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #C018C4, #C41818)', onclick='changeBg(\'linear-gradient(to right, #C018C4, #C41818)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #8B00BB, #030094)', onclick='changeBg(\'linear-gradient(to right, #8B00BB, #030094)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)', onclick='changeBg(\'linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)', onclick='changeBg(\'linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)\')')
h3 纯色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #7D9D9C', onclick='changeBg(\'#7D9D9C\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #fff', onclick='changeBg(\'#fff\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #49A6E9', onclick='changeBg(\'#49A6E9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #F7CEFF', onclick='changeBg(\'#F7CEFF\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #FFFFCE', onclick='changeBg(\'#FFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #CFFFCE', onclick='changeBg(\'#CFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #17EFE9', onclick='changeBg(\'#17EFE9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #9F17EF', onclick='changeBg(\'#9F17EF\')')
#con-echarts.asetting
h1 文章统计
h2 监控
iframe(src="https://status.yisous.xyz" width="100%" height="500px" frameborder="no")
if !is_page()
h2 文章统计
script(src="https://npm.elemecdn.com/echarts@4.9.0/dist/echarts.min.js")
div(id="posts-chart" data-start="2021-01" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="tags-chart" data-length="10" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="categories-chart" data-parent="true" style="border-radius: 8px; height: 300px; padding: 10px;")
h2 访问统计
| 显示不出来请刷新页面
//-下面换成自己的51la统计

#con-abouts.asetting
h1 关于
| Hexo-theme-Acryple v1.0.100
br
| Ariasaka Console v0.01
br
| 欢迎
a(href="/messageboard")
| 反馈!
#setting-sidesl
button(title="恢复默认设置" class="reSettings con-rightside")
i.fa.fa-repeat
#setting-sides
button(title="繁简转换" class="con-rightside" id="con-translate" onclick="javascript:rmf.translate();")
i.iconfont.icon-fanti
button(title="昼夜切换" class="con-rightside" id="con-mode" onclick="switchDarkMode();")
i.fa.fa-adjust
if is_post()||is_page()
button(title="阅读模式" class="con-rightside" id="con-reading" onclick="rmf.switchReadMode();")
i.fa.fa-book-open
if !is_page()
button(title="单双栏切换" class="con-rightside" id="con-toggleaside" onclick="toggleAside();")
i.fas.fa-arrows-alt-h
if !is_page()
button(title="左右栏切换" class="con-rightside" id="con-toggleleftaside" onclick="switchAside();")
i.fas.fa-binoculars
if is_post()||is_page()
button(title="开关弹幕" class="con-rightside" id="con-barrage" onclick="switchCommentBarrage();")
i.iconfont.icon-danmu
button(title="全屏" class="con-rightside" id="con-fullscreen" onclick="fullScreen();")
i.fas.fa-expand

js部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
document.addEventListener('pjax:complete', tosetting);
document.addEventListener('DOMContentLoaded', tosetting);
function tosetting(){
$("#settingWindow").hide();
if(localStorage.getItem("blur")=="false"){
blur=0;
}else{
blur=1;

}
if(localStorage.getItem("yjjs")=="true"){
yjjs=1;
}else{
yjjs=0;

}
if(localStorage.getItem("fpson")==undefined){
localStorage.setItem("fpson","1");
}
if(!blur){
document.getElementById("settingStyle").innerText=`
*,*:not(.card-info)::before,*::after{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
setBlur=function(){
blur=!blur;
localStorage.setItem("blur",blur);
if(!blur){
document.getElementById("settingStyle").innerText=`
*{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
}
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
yjjs1=function(){
yjjs=!yjjs;
localStorage.setItem("yjjs",yjjs)
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
}
if(localStorage.getItem("blogTheme")=="acrylic"){
document.getElementById("css").href="";
}
switchTheme=function(){
if(document.getElementById("css").href==window.location.protocol+"//"+window.location.host+"/css/stylessimple.css"){
document.getElementById("css").href=""
localStorage.setItem("blogTheme","acrylic");
}else{
document.getElementById("css").href="/css/stylessimple.css"
localStorage.setItem("blogTheme","simple");
}
}
setColor=function(c){
document.getElementById("themeColor").innerText=`:root{--lyx-theme:var(--lyx-${c})!important}`;
localStorage.setItem("themeColor",c);

}
setFont=function(n){
localStorage.setItem("font",n);
if(n=="main"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else if(n=="HYPailou"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="Fredoka,HYPailou,KyoukashoProL,-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else{
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,\"微软雅黑\", sans-serif"
}
document.body.style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,'微软雅黑', sans-serif"
document.documentElement.style.setProperty('--global-font', n)
}
}
if(localStorage.getItem("themeColor")==undefined){
localStorage.setItem("themeColor","pink");
}

setColor(localStorage.getItem("themeColor"));



if(localStorage.getItem("hideRightside")==undefined){
localStorage.setItem("hideRightside","0");
}

if(localStorage.getItem("hideRightside")=="1"){
$("#rightside").toggle()
}
toggleRightside=function(){
$("#rightside").toggle();
localStorage.setItem("hideRightside",Math.abs(Number(localStorage.getItem("hideRightside"))-1))
}
if(localStorage.getItem("font")==undefined){
localStorage.setItem("font","HYTMR")
}
setFont(localStorage.getItem("font"))
// 存数据
// name:命名 data:数据
saveData=function(name, data) {
localStorage.setItem(name, JSON.stringify({ 'time': Date.now(), 'data': data }))
}

// 取数据
// name:命名 time:过期时长,单位分钟,如传入30,即加载数据时如果超出30分钟返回0,否则返回数据
loadData=function(name, time) {
let d = JSON.parse(localStorage.getItem(name));
// 过期或有错误返回 0 否则返回数据
if (d) {
let t = Date.now() - d.time
if (t < (time * 60 * 1000) && t > -1) return d.data;
}
return 0;
}
// 切换背景函数
// 此处的flag是为了每次读取时都重新存储一次,导致过期时间不稳定
// 如果flag为0则存储,即设置背景. 为1则不存储,即每次加载自动读取背景.
changeBg=function(s, flag) {
let bg = document.getElementById('web_bg')
if (s.charAt(0) == '#') {
bg.style.backgroundColor = s
bg.style.backgroundImage = 'none'
} else bg.style.backgroundImage = s
if (!flag) { saveData('blogbg', s) }
}
// 上面两个函数如果你有其他需要存取数据的功能,也可以直接使用

// 读取背景
try {
let data = loadData('blogbg', 1440)
if (data) changeBg(data, 1)
else localStorage.removeItem('blogbg');
} catch (error) { localStorage.removeItem('blogbg'); }



fpssw=function(){
if(localStorage.getItem("fpson")=="1"){
localStorage.setItem("fpson","0");
}else{
localStorage.setItem("fpson","1");
}
}
$(".asetting").hide();
$('#backer').hide();
$("#"+localStorage.getItem("themeColor")).attr("checked", true);
if(localStorage.getItem("blur")=="false"){
document.getElementById("blur").checked=true;
}
if(localStorage.getItem("yjjs")=="true"){
document.getElementById("yjjs").checked=true;
}
if(localStorage.getItem("fpson")=="1"){
document.getElementById("fpson").checked=true;
}


if(localStorage.getItem("sakurahide")=="false"){
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else if(localStorage.getItem("sakurahide")==null){
localStorage.setItem("sakurahide","false");
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else{
setTimeout(
stopp,1000);
isSakura=0;
}
if(localStorage.getItem("aplayerhide")=="false"){
document.getElementById("hideAplayer").checked=true;
}
else if(localStorage.getItem("aplayerhide")==null){
localStorage.setItem("aplayerhide","false");
document.getElementById("hideAplayer").checked=true;
}
else{
doStuff=function() {
flag=0;
try{
ap=aplayers[0];
ap.list;
flag=1;
}catch{
setTimeout(doStuff, 50);
return;
}
if(flag){
$(".aplayer-fixed").hide()
}
}
doStuff();

}

document.getElementsByClassName("reSettings")[0].onclick=function(){
localStorage.clear()
window.location.reload()
}

toggleWinbox=function(){
$("#settingWindow").fadeToggle();
if(document.getElementById("settingWindow").style.display!="none"){
document.getElementById("settingWindow").style.display="flex";
}
}
fullScreen=function() {
if (document.fullscreenElement) document.exitFullscreen()
else document.documentElement.requestFullscreen();
}
toggleAside=function(){
const $htmlDom = document.documentElement.classList
$htmlDom.contains('hide-aside')
? saveToLocal.set('aside-status', 'show', 2)
: saveToLocal.set('aside-status', 'hide', 2)
$htmlDom.toggle('hide-aside')
}
toggleAplayer=function(){
$(".aplayer-fixed").toggle()
if(localStorage.getItem("aplayerhide")=="true"){
localStorage.setItem("aplayerhide",false);
}
else{
localStorage.setItem("aplayerhide",true);
}
}
// position = $(window).scrollTop();
// $(window).scroll(function () {

// scroll = $(window).scrollTop();

// if (scroll > position) {
// document.getElementsByTagName("header")[0].style.transform="translateY(58px)";
// } else {


// document.getElementsByTagName("header")[0].style.transform="";

// }

// position = scroll;
// });
toggleSakuras=function(){
isSakura=!isSakura;
stopp(isSakura);
if(localStorage.getItem("sakurahide")=="true"){
localStorage.setItem("sakurahide",false);
}
else{
localStorage.setItem("sakurahide",true);
}
}
switchAside=function(){
if(left){
document.getElementById("aside-content").classList.add("right");
document.querySelector(".layout > div:first-child").classList.add("left");
localStorage.setItem("leftAside","false");
}
else{
document.getElementById("aside-content").className="aside-content";
document.querySelector(".layout > div:first-child").className="";
try{
document.querySelector("#recent-posts").className="recent-posts";
}catch(err){}localStorage.setItem("leftAside","true");}
left=!left;
}
left=1;
if(localStorage.getItem("leftAside")=="true"||localStorage.getItem("leftAside")==null){

}else{
switchAside();
}
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
document.getElementById("autoTheme").checked=true;
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
}
if(location.href.indexOf('posts')!=-1){
var xhr = new XMLHttpRequest();
var url = document.querySelector('#page-header').style.backgroundImage.split('url("')[1].split('")')[0];
xhr.open("GET","https://apis.yisous.xyz/api/imageColor?imgurl="+url, true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState===4) {
if(xhr.status===200) {
document.getElementById("themeColor").innerText=`:root{--lyx-theme:${xhr.responseText}!important}`;
}
}
}
}
toggleAutoTheme=()=>{
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
$("#con-mode").show();
}
else{
localStorage.setItem("autoTheme","true");
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
$("#con-mode").hide();
}
}
}
switchDarkMode = function () {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
};

新建css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*使用了Chrome105新特性has,兼容性不好qwq*/
.con-rightside{
height:50px!important;
width: 50px!important;
border-radius: 30px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
margin:10px;
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
.con-rightside i::before{
font-size:30px;
}
[data-theme="dark"] .con-rightside i::before{
color:white
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
@media screen and (max-width:600px){
.con-rightside i::before{
font-size: 16px;
}
.con-rightside{
height:20px!important;
width:20px!important;
}
}
@media screen and (max-width:768px){
#con-barrage{
display: none!important;
}
}
#setting-buttons{
display: flex;
flex-wrap: wrap;
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#setting-sides{
margin-left: auto;
}
#setting-sides{
white-space: nowrap;
}
#setting-sidesl{
display: flex;
}
.settings .content{
margin-left:20px;
}
.settings{
margin:15px
}
/* 开关 */
.settings input[type="checkbox"] {
width: 38px;
height: 20px;
position: relative;
border: 1px solid #000000;
background-color: #0000;
border-radius: 12px;
background-clip: content-box;
display: inline-block;
-webkit-appearance: none;
user-select: none;
outline: none;
transform: translateY(5px);}
[data-theme="dark"] .settings input[type="checkbox"] {
border: 1px solid white;
}
.settings input[type="checkbox"]:before {
content: '';
width: 12px;
height: 12px;
position: absolute;
top: 3px;
left: 5px;
border-radius: 10px;
background-color: #000;}
[data-theme="dark"] .settings input[type="checkbox"]:before{
background-color: white;
}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);border-color:var(--lyx-theme)}
.settings input[type="checkbox"]:checked:before {
left: 19px;background-color: white!important;}

.settings input[type="checkbox"] {
transition: border background-color box-shadow }
.settings input[type="checkbox"]:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);
/* transition: border ease 0.4s, background-color ease 1.2s; */
}.settings input[type="checkbox"]:checked:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked:hover{
opacity: 0.8;
}
.settings input[type="checkbox"]:active{
background-color: #666666!important;
border-color:#666666!important;
}
.settings input[type="checkbox"]:active::before{
background-color:white!important;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
position: fixed;
display: block;
width: 80%;
max-width: 800px;
left: 50%;
top: 50%;
max-height: 80%;
background-color: #ffffffdd;
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border: 1px solid var(--lyx-border);
padding:30px;
backdrop-filter: blur(10px);
-ms-transform-origin-y:translate(-50%,-50%);
-webkit-transform:translate(-50%,-50%);
-moz-transform:translate(-50%,-50%);
-ms-transform:translate(-50%,-50%);
-o-transform:translate(-50%,-50%);
z-index: 514;
display: none;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
display: none;
flex-direction: column;
}
.settingx{
width: 46%;
text-align: left;
font-size: 28px;
padding: 10px;
margin: 10px;
background-color: var(--lyx-light-grey);
opacity: 0.8;
border-radius: 10px;
}
.settingx:hover{
background-color: var(--lyx-gray);
}
.settingx i{
margin: 5px;
}
@media screen and (max-width:768px){
.settingx{
width:100%!important;
}
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#close-console{
text-align: right;
}
#stt,#close-console{
margin-left: auto;
}
#close-console:not(#close-console:hover){
color: var(--global-font-color);
}

然后在[blogRoot]/themes/butterfly/layout/includes/layout.pug中添加:

1
2
3
4
...
include ./rightside.pug
! =partial('includes/third-party/search/index', {}, {cache: true})
+ ! =partial('includes/setting',{}, {cache:false})

还要引入一些外挂css标签:

1
2
3
4
5
6
7
8
9
10
inject:
head:
- <style id="settingStyle"></style>
- <style id="css"></style>
- <style id="themeColor"></style>
...
bottom:
- <script type="text/javascript" src="https://gcore.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
...

butterfly\layout\includes\rightside.pug添加按钮

1
2
3
4
5
6
7
when 'comment'
if commentsJsLoad
a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment"))
i.fas.fa-comments
+ when 'bg'
+ button(type="button" title='切换背景' onclick="toggleWinbox()")
+ i.fas.fa-display

然后修改:

1
2
3
4
5
#rightside
- const { enable, hide, show } = theme.rightside_item_order
- const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside']
- - const showArray = enable ? show && show.split(',') : ['toc','chat','comment']
+ - const showArray = enable ? show && show.split(',') : ['toc','chat','comment','bg']

修改鼠标样式

致美化下载鼠标样式

在css中添加并修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* 全局默认鼠标指针 */
body,
html {
cursor: url('/self/img/cursors/mogu/normal.cur'),auto !important;
}
/* 悬停图片时的鼠标指针 */
img {
cursor: url('/self/img/cursors/mogu/normal.cur'), auto !important;
}
/* 悬停图片弹出窗口时的鼠标指针 */
.fancybox__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
.carousel__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择链接标签时的鼠标指针 */
a:hover,#site-name:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择代码框展开和复制按钮时的鼠标指针 */
.copy-button:hover,.expand:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选中输入框时的鼠标指针 */
input:hover, textarea:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停按钮时的鼠标指针 */
button:hover,.scroll-down-effects:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页脚链接标签(例如页脚徽标)时的鼠标指针 */
#footer-wrap a:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页码时的鼠标指针 */
#pagination .page-number:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停菜单栏时的鼠标指针 */
#nav .site-page:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停滚动条的鼠标指针(只对Chrome有效) */
::-webkit-scrollbar:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
/* 悬停评论按钮的鼠标指针(我使用的是Gitalk/Valine) */
.switch-btn,.switch-btn:before,.gt-user-inner,.gt-ico,.gt-user-name,.gt-btn,.vbtn,svg,.at_button{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停非链接文本时的鼠标指针 */
h1,h2,h3,h4,h5,h6,#subtitle,.content,.line,.post-content p,.post-content li{
cursor: url('/self/img/cursors/mogu/text.ani'), auto;
}
/* 悬停文章日期 */
.post-meta-date:hover,.post-meta-date-created:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
文章作者: gglss
文章链接: http://example.com/posts/54899.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
最新文章
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55045.html b/posts/55045.html index 24edb40f6..af2c53c28 100644 --- a/posts/55045.html +++ b/posts/55045.html @@ -1 +1 @@ -镜像 | GGLSS

镜像

镜像

背景

docker镜像是最小的,被精简过的Linux系统,是不带vim命令的

使用命令 ‘vim a.txt’ 进行新建编辑a.txt文件,就会提示找不到命令

给镜像容器新增vim命令

  1. 更新镜像

    apt-get update

  2. 下载vim功能

    apt-get -y install vim

  3. 提交副本使成为一个新镜像

    docker commit -m=”提交的描述信息” -a=”作者” 容器id 要创建的目标镜像名:[标签名]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
356e32244966 mytest/ubuntu:3.5 "bash" 2 hours ago Up 2 hours elated_aryabhata
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5
sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ggls/ubuntu 1.5 87e99e19eeef 7 seconds ago 176MB
mytest/ubuntu 3.5 a92a27affdde 2 hours ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
文章作者: gglss
文章链接: http://example.com/posts/55045.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +镜像 | GGLSS

镜像

镜像

背景

docker镜像是最小的,被精简过的Linux系统,是不带vim命令的

使用命令 ‘vim a.txt’ 进行新建编辑a.txt文件,就会提示找不到命令

给镜像容器新增vim命令

  1. 更新镜像

    apt-get update

  2. 下载vim功能

    apt-get -y install vim

  3. 提交副本使成为一个新镜像

    docker commit -m=”提交的描述信息” -a=”作者” 容器id 要创建的目标镜像名:[标签名]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
356e32244966 mytest/ubuntu:3.5 "bash" 2 hours ago Up 2 hours elated_aryabhata
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5
sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ggls/ubuntu 1.5 87e99e19eeef 7 seconds ago 176MB
mytest/ubuntu 3.5 a92a27affdde 2 hours ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
文章作者: gglss
文章链接: http://example.com/posts/55045.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55320.html b/posts/55320.html index 8f57409fe..327996acd 100644 --- a/posts/55320.html +++ b/posts/55320.html @@ -1 +1 @@ -Jmeter之断言和聚合报告 | GGLSS

Jmeter之断言和聚合报告

怎么对请求进行响应断言

  • 右键 HTTP Request

  • 点击add --> Assertions --> Response Assertion

断言组件就添加成功

配置响应断言

Field to Test 下面就是断言的各种方法

  • Text Response 文本断言

Patterns to Test输入title之间包含的文字,及配置成功

  • Response Code 响应码断言

Patterns to Test输入响应码,比如 200

  • Response Message
  • Request Headers
  • URL Sampled
  • Document(text)
  • Request Data

然后运行但并发压测,验证断言添加是否正确,在View Results Tree 中查看结果

怎么使用聚合报告

  • 右键 Thread Group

  • 点击 Add --> Listener --> Aggregate Report

聚合报告就添加了

性能指标解读

  • Average: 单个请求的平均响应时间
  • Median: 中位数,也就是50%用户的响应时间
  • 90%Line: 90%用户的响应时间
  • 95%Line: 95%用户的响应时间
  • 99%Line: 99%用户的响应时间
  • Min: 最小的请求响应时间
  • Max: 最大的请求响应时间
  • Error%: 错误率
  • Throughput: 吞吐量
  • Received KB/sec: 每秒从服务器接收到的数据量
  • Sent KB/sec: 每秒从客户端发送的请求的数量
文章作者: gglss
文章链接: http://example.com/posts/55320.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Jmeter之断言和聚合报告 | GGLSS

Jmeter之断言和聚合报告

怎么对请求进行响应断言

  • 右键 HTTP Request

  • 点击add --> Assertions --> Response Assertion

断言组件就添加成功

配置响应断言

Field to Test 下面就是断言的各种方法

  • Text Response 文本断言

Patterns to Test输入title之间包含的文字,及配置成功

  • Response Code 响应码断言

Patterns to Test输入响应码,比如 200

  • Response Message
  • Request Headers
  • URL Sampled
  • Document(text)
  • Request Data

然后运行但并发压测,验证断言添加是否正确,在View Results Tree 中查看结果

怎么使用聚合报告

  • 右键 Thread Group

  • 点击 Add --> Listener --> Aggregate Report

聚合报告就添加了

性能指标解读

  • Average: 单个请求的平均响应时间
  • Median: 中位数,也就是50%用户的响应时间
  • 90%Line: 90%用户的响应时间
  • 95%Line: 95%用户的响应时间
  • 99%Line: 99%用户的响应时间
  • Min: 最小的请求响应时间
  • Max: 最大的请求响应时间
  • Error%: 错误率
  • Throughput: 吞吐量
  • Received KB/sec: 每秒从服务器接收到的数据量
  • Sent KB/sec: 每秒从客户端发送的请求的数量
文章作者: gglss
文章链接: http://example.com/posts/55320.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55332.html b/posts/55332.html index f2c0febec..7506fbea6 100644 --- a/posts/55332.html +++ b/posts/55332.html @@ -1 +1 @@ -继承、重写与重载 | GGLSS

继承、重写与重载

继承

继承是相对于类来说,通过关键字extends来实现

  • 可以获取父类的属性和方法
  • 提高代码的复用性
  • 父类修改了内容,子类也会修改

调用

父类的属性和方法

  • this表示当前对象的引用
  • super表示父类对象的引用
  • 调用构造方法
    • this(参数列表)表示调用当前类中的构造方法
    • super(参数列表)表示调用父类的构造方法,必须放在方法中的第一行
  • 调用属性
    • this.属性表示调用当前对象的属性
    • super.属性表示调用父类的属性,可以拿到被重写之前的数据
  • 调用方法
    • this.方法表示调用当前对象的方法
    • super.方法表示调用父类的方法,可以拿到被重写之前的方法,不用放在代码的第一行

重写

重写是子类可以重写父类的方法,使用override标识

  • 方法名和参数不变,只修改方法体
  • 访问权限不能比父类的范围更小
  • 私有的方法能被子类继承,但不能使用和重写
  • 静态的方法能被子类继承,能使用但不能被重写
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class testeass {

    public void aa(String name, int age){
    System.out.println(name + age);
    }
    }

    class testaaa extends testeass{

    @Override
    public void aa(String name, int age) {
    System.out.println("这是重写方法,方法名、参数和返回数据都不变,只能修改方法体");
    System.out.println(name + age);
    }
    }

重载

重载是同一个类下对方法进行重载

  • 方法名相同,参数不相同 (参数个数不同/参数类型不同/参数排列顺序不同)
  • 返回类型不限制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class jichu {

    // 原方法
    public void hello(String name, int aa){
    System.out.println("拼接起来的值是:"+ name + aa );
    }

    // 重载后的方法
    public void hello(int aa, String name){
    System.out.println("aaaaaaa:" + aa);
    }
    }
文章作者: gglss
文章链接: http://example.com/posts/55332.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +继承、重写与重载 | GGLSS

继承、重写与重载

继承

继承是相对于类来说,通过关键字extends来实现

  • 可以获取父类的属性和方法
  • 提高代码的复用性
  • 父类修改了内容,子类也会修改

调用

父类的属性和方法

  • this表示当前对象的引用
  • super表示父类对象的引用
  • 调用构造方法
    • this(参数列表)表示调用当前类中的构造方法
    • super(参数列表)表示调用父类的构造方法,必须放在方法中的第一行
  • 调用属性
    • this.属性表示调用当前对象的属性
    • super.属性表示调用父类的属性,可以拿到被重写之前的数据
  • 调用方法
    • this.方法表示调用当前对象的方法
    • super.方法表示调用父类的方法,可以拿到被重写之前的方法,不用放在代码的第一行

重写

重写是子类可以重写父类的方法,使用override标识

  • 方法名和参数不变,只修改方法体
  • 访问权限不能比父类的范围更小
  • 私有的方法能被子类继承,但不能使用和重写
  • 静态的方法能被子类继承,能使用但不能被重写
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class testeass {

    public void aa(String name, int age){
    System.out.println(name + age);
    }
    }

    class testaaa extends testeass{

    @Override
    public void aa(String name, int age) {
    System.out.println("这是重写方法,方法名、参数和返回数据都不变,只能修改方法体");
    System.out.println(name + age);
    }
    }

重载

重载是同一个类下对方法进行重载

  • 方法名相同,参数不相同 (参数个数不同/参数类型不同/参数排列顺序不同)
  • 返回类型不限制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class jichu {

    // 原方法
    public void hello(String name, int aa){
    System.out.println("拼接起来的值是:"+ name + aa );
    }

    // 重载后的方法
    public void hello(int aa, String name){
    System.out.println("aaaaaaa:" + aa);
    }
    }
文章作者: gglss
文章链接: http://example.com/posts/55332.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55393.html b/posts/55393.html index 5d0efde74..db1fca6a5 100644 --- a/posts/55393.html +++ b/posts/55393.html @@ -1 +1 @@ -jmeter对数据库进行增删改查 | GGLSS

jmeter对数据库进行增删改查

环境

  • jmeter版本(5.1.1)
  • mysql-connector-java-8.0.15.jar

mysql.jar放在jmeter的lib目录下

配置

连接配置组件

  • 右键Thread Group
  • 点击Add -> Config Element -> JDBC Connection Configuration

参数配置

  • ==Varianle Name for created pool==:db_connnection_pool # 连接池名称
  • ==Validation Query==:select 1
  • ==Database URL==:jdbc:mysql://8.142.144.75:3306/jmeter_class?alloMultiQueries = true&useSSL=false
  • ==JDBC Driver class==:选择com.mysql.jbc.Driver
  • 输入username
  • 输入password

Jmeter数据库JDBC请求

  • 右键Thread Group
  • 点击Add -> Sampler -> JDBC Request
配置介绍

Variable Name Bound to Pool: 配置参数区
SQL Query:sql语句区
其他:变量配置区

举个栗子:通过Insert语句,向数据库添加测试数据
  • JDBC Connection Configuration: db_connnection_pool #输入连接池名称
  • Query Type:选择Prepared Updata Statement
  • Quert:输入sql语句
1
INSERT INTO jmeter_class.user (`username`,`password`) VALUES(?,?)
  • Paeameter values:testuser,aaaaaa
  • Paeameter types:varchar,varchar
  • Query timeout(s):6
  • 添加查看结果树
  • 运行

运行结果ResponseBody:

1
1 updates.

这就配置成功

文章作者: gglss
文章链接: http://example.com/posts/55393.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +jmeter对数据库进行增删改查 | GGLSS

jmeter对数据库进行增删改查

环境

  • jmeter版本(5.1.1)
  • mysql-connector-java-8.0.15.jar

mysql.jar放在jmeter的lib目录下

配置

连接配置组件

  • 右键Thread Group
  • 点击Add -> Config Element -> JDBC Connection Configuration

参数配置

  • ==Varianle Name for created pool==:db_connnection_pool # 连接池名称
  • ==Validation Query==:select 1
  • ==Database URL==:jdbc:mysql://8.142.144.75:3306/jmeter_class?alloMultiQueries = true&useSSL=false
  • ==JDBC Driver class==:选择com.mysql.jbc.Driver
  • 输入username
  • 输入password

Jmeter数据库JDBC请求

  • 右键Thread Group
  • 点击Add -> Sampler -> JDBC Request
配置介绍

Variable Name Bound to Pool: 配置参数区
SQL Query:sql语句区
其他:变量配置区

举个栗子:通过Insert语句,向数据库添加测试数据
  • JDBC Connection Configuration: db_connnection_pool #输入连接池名称
  • Query Type:选择Prepared Updata Statement
  • Quert:输入sql语句
1
INSERT INTO jmeter_class.user (`username`,`password`) VALUES(?,?)
  • Paeameter values:testuser,aaaaaa
  • Paeameter types:varchar,varchar
  • Query timeout(s):6
  • 添加查看结果树
  • 运行

运行结果ResponseBody:

1
1 updates.

这就配置成功

文章作者: gglss
文章链接: http://example.com/posts/55393.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55605.html b/posts/55605.html index 6c2ea1592..8c6ad5b84 100644 --- a/posts/55605.html +++ b/posts/55605.html @@ -1 +1 @@ -docker 镜像(一) | GGLSS

docker 镜像(一)

镜像(一)

查询本地主机上的镜像

docker images
OPTIONS说明:

    • a 列出本地所有的镜像(含历史镜像)
    • q 只显示镜像ID

举个栗子

1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
tomcat latest fb5657adc892 4 months ago 680MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
tomcat latest fb5657adc892 4 months ago 680MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images -q
b8e65a4d736d
fb5657adc892
feb5d9fea6a5
5d0da3dc9764
9b9cb95443b5
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#

查询镜像仓库是否有该镜像

docker search 镜像名称

举个栗子

STARS 点赞数
OFFICIAL 官方认证

1
2
3
4
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Dockeriz… 1718 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demonstr… 151

显示前n条镜像

docker search –limit n 镜像名称

1
2
3
4
5
6
7
8
9
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker search --limit 5 redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 10851 [OK]
bitnami/redis Bitnami Redis Docker Image 214 [OK]
bitnami/redis-sentinel Bitnami Docker Image for Redis Sentinel 36 [OK]
circleci/redis CircleCI images for Redis 12 [OK]
bitnami/redis-exporter 6
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

下载安装镜像到本地

docker pull 镜像名称:标签版本号

没有tag就是最新版

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker pull redis:6.0.8
6.0.8: Pulling from library/redis
bb79b6b2107f: Pull complete
1ed3521a5dcb: Pull complete
5999b99cee8f: Pull complete
3f806f5245c9: Pull complete
f8a4497572b2: Pull complete
eafe3b6b8d06: Pull complete
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Downloaded newer image for redis:6.0.8
docker.io/library/redis:6.0.8
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

文章作者: gglss
文章链接: http://example.com/posts/55605.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +docker 镜像(一) | GGLSS

docker 镜像(一)

镜像(一)

查询本地主机上的镜像

docker images
OPTIONS说明:

    • a 列出本地所有的镜像(含历史镜像)
    • q 只显示镜像ID

举个栗子

1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
tomcat latest fb5657adc892 4 months ago 680MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
tomcat latest fb5657adc892 4 months ago 680MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos latest 5d0da3dc9764 7 months ago 231MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
1
2
3
4
5
6
7
8
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images -q
b8e65a4d736d
fb5657adc892
feb5d9fea6a5
5d0da3dc9764
9b9cb95443b5
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#

查询镜像仓库是否有该镜像

docker search 镜像名称

举个栗子

STARS 点赞数
OFFICIAL 官方认证

1
2
3
4
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Dockeriz… 1718 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demonstr… 151

显示前n条镜像

docker search –limit n 镜像名称

1
2
3
4
5
6
7
8
9
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker search --limit 5 redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 10851 [OK]
bitnami/redis Bitnami Redis Docker Image 214 [OK]
bitnami/redis-sentinel Bitnami Docker Image for Redis Sentinel 36 [OK]
circleci/redis CircleCI images for Redis 12 [OK]
bitnami/redis-exporter 6
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

下载安装镜像到本地

docker pull 镜像名称:标签版本号

没有tag就是最新版

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker pull redis:6.0.8
6.0.8: Pulling from library/redis
bb79b6b2107f: Pull complete
1ed3521a5dcb: Pull complete
5999b99cee8f: Pull complete
3f806f5245c9: Pull complete
f8a4497572b2: Pull complete
eafe3b6b8d06: Pull complete
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Downloaded newer image for redis:6.0.8
docker.io/library/redis:6.0.8
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

文章作者: gglss
文章链接: http://example.com/posts/55605.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/557.html b/posts/557.html index 2dc6afaa0..8b13f9595 100644 --- a/posts/557.html +++ b/posts/557.html @@ -1 +1 @@ -接口开发环境部署 | GGLSS

接口开发环境部署

开发环境

  • IDEA
  • Maven
  • Spring Boot
  • JDK_86001

在idea安装SpringBoot插件

在maven下安装插件,需要在pox.xml文件输入下面的数据,然后更新文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<springboot.version>2.5.6</springboot.version>
<swagger.version>2.9.2</swagger.version>
</properties>

<dependencies>
<!-- springboot 2.5.6 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>

上面的${springboot.version}是在上面里面定义的版本信息,如果多个插件的版本一致就可以在属性上进行定义,然后使用变量进行引用

文章作者: gglss
文章链接: http://example.com/posts/557.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +接口开发环境部署 | GGLSS

接口开发环境部署

开发环境

  • IDEA
  • Maven
  • Spring Boot
  • JDK_86001

在idea安装SpringBoot插件

在maven下安装插件,需要在pox.xml文件输入下面的数据,然后更新文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<springboot.version>2.5.6</springboot.version>
<swagger.version>2.9.2</swagger.version>
</properties>

<dependencies>
<!-- springboot 2.5.6 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
</dependencies>

上面的${springboot.version}是在上面里面定义的版本信息,如果多个插件的版本一致就可以在属性上进行定义,然后使用变量进行引用

文章作者: gglss
文章链接: http://example.com/posts/557.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/55957.html b/posts/55957.html index 801b49f3c..04f3826df 100644 --- a/posts/55957.html +++ b/posts/55957.html @@ -1 +1 @@ -Shell工具(二) | GGLSS

Shell工具(二)

awk工具

强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

awk [选项参数] ‘pattern1{action1}’ filename

  • pattern:表示awk在数据中查找的内容
  • action:找到匹配内容时执行命令
选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量
举个栗子

数据准备的是/etc/passwd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@b09ed0cc2c9d opt]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

搜素passwd文件以root关键字开头的所有航,并输出该行的第7列

1
2
3
[root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $7}' passwd
/bin/bash
[root@b09ed0cc2c9d opt]#

搜素passwd文件以root关键字开头的所有航,并输出该行的第1列和第7列,输出时以逗号分隔

1
2
[root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $1","$7}' passwd
root,/bin/bash

只显示/etc/passwd的第一列和第7列,以逗号分隔,且在所有航前面添加列名 user,shell在最后一行添加 ddd, /bin/zuishuai

1
[root@b09ed0cc2c9d opt]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "ddd,bin/zuishuai"}' passwd

注意:BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行

将passwd 文件中的用户id增加数值1并输出

1
[root@b09ed0cc2c9d opt]# awk -F : -v i=1 '{print $3+i}' passwd
内置变量
变量说明
filename文件名
nr已读的记录数
nf浏览记录的域的个数
举个栗子

数据准备

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# cat sed.txt
dong shen
guan zhen
wo wo
lai lai

le le

统计passwd文件名,每行的行号,每列的列数

1
[root@b09ed0cc2c9d opt]# awk -F : '{print FILENAME "," NR "," NF}' passwd

打印空行所在的行号

1
awk '/^$/ {print NR}' sed.txt
sort工具

文件排序

sort(选项)(参数)

选项说明
-n按照数值大小排序
-r以相反的顺序排序
-t设置排序使用的分隔字符
-k指定需要排序的列

参数是指定待排序文件列表

文章作者: gglss
文章链接: http://example.com/posts/55957.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell工具(二) | GGLSS

Shell工具(二)

awk工具

强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

awk [选项参数] ‘pattern1{action1}’ filename

  • pattern:表示awk在数据中查找的内容
  • action:找到匹配内容时执行命令
选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量
举个栗子

数据准备的是/etc/passwd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@b09ed0cc2c9d opt]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

搜素passwd文件以root关键字开头的所有航,并输出该行的第7列

1
2
3
[root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $7}' passwd
/bin/bash
[root@b09ed0cc2c9d opt]#

搜素passwd文件以root关键字开头的所有航,并输出该行的第1列和第7列,输出时以逗号分隔

1
2
[root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $1","$7}' passwd
root,/bin/bash

只显示/etc/passwd的第一列和第7列,以逗号分隔,且在所有航前面添加列名 user,shell在最后一行添加 ddd, /bin/zuishuai

1
[root@b09ed0cc2c9d opt]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "ddd,bin/zuishuai"}' passwd

注意:BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行

将passwd 文件中的用户id增加数值1并输出

1
[root@b09ed0cc2c9d opt]# awk -F : -v i=1 '{print $3+i}' passwd
内置变量
变量说明
filename文件名
nr已读的记录数
nf浏览记录的域的个数
举个栗子

数据准备

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# cat sed.txt
dong shen
guan zhen
wo wo
lai lai

le le

统计passwd文件名,每行的行号,每列的列数

1
[root@b09ed0cc2c9d opt]# awk -F : '{print FILENAME "," NR "," NF}' passwd

打印空行所在的行号

1
awk '/^$/ {print NR}' sed.txt
sort工具

文件排序

sort(选项)(参数)

选项说明
-n按照数值大小排序
-r以相反的顺序排序
-t设置排序使用的分隔字符
-k指定需要排序的列

参数是指定待排序文件列表

文章作者: gglss
文章链接: http://example.com/posts/55957.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/56883.html b/posts/56883.html index 0c01d0409..4dc861bec 100644 --- a/posts/56883.html +++ b/posts/56883.html @@ -1 +1 @@ -Regular Expression Extractor正则表达式处理器 | GGLSS

Regular Expression Extractor正则表达式处理器

正则表达式规则

  • ():括起来的部分是要提取的
  • .:匹配任何字符串
  • +:一次或多次
  • ?:在找到第一个匹配项后停止

模板

用$$引用起来,如果正则表达式中有多个正则表达式,可以是$3$$2$等,表示解析到的第几个值给title,$1$表示第一个

匹配数字

0代表随机,1代表全部取值,通常使用0

缺省值

若参数没有取到值,那默认给一个值让他取

文章作者: gglss
文章链接: http://example.com/posts/56883.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Regular Expression Extractor正则表达式处理器 | GGLSS

Regular Expression Extractor正则表达式处理器

正则表达式规则

  • ():括起来的部分是要提取的
  • .:匹配任何字符串
  • +:一次或多次
  • ?:在找到第一个匹配项后停止

模板

用$$引用起来,如果正则表达式中有多个正则表达式,可以是$3$$2$等,表示解析到的第几个值给title,$1$表示第一个

匹配数字

0代表随机,1代表全部取值,通常使用0

缺省值

若参数没有取到值,那默认给一个值让他取

文章作者: gglss
文章链接: http://example.com/posts/56883.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/58312.html b/posts/58312.html index e46a92d76..041d23cdb 100644 --- a/posts/58312.html +++ b/posts/58312.html @@ -1 +1 @@ -使用docker安装常用软件:mysql | GGLSS

使用docker安装常用软件:mysql

使用docker安装常用软件:mysql

以mysql 5.7为例

使用docker pull mysql:5.7拉取mysql 5.7镜像

使用镜像创建容器

简单版

使用docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7运行镜像创建容器

因为linux系统自己装了mysql,避免端口冲突,先运行ps -ef|grep mysql查询

使用docker ps查询容器编号

使用docker exec -it 容器编号 bash进入mysql容器

使用mysql -uroot -p,输入密码,登录mysql

验证

show databases

1
2
3
4
5
6
7
8
9
10
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
中文乱码问题
1
2
3
4
5
INSERT INTo t1 VALUES(3, "张三");
---
INSERT INTo t1 VALUES(3, "张三")
> 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
> 时间: 0.038s

因为docker默认编码字符集隐患

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>

解决中文乱码问题

在宿主机的/ggls/mysql/conf目录下vim my.cnf文件,通过容器卷同步给容器实例

1
2
3
4
5
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

改完后重启mysql实例

服务器输入SHOW VARIABLES LIKE 'character%';验证

docker安装好并run出容器后,先修改字符集编码在创建mysql库

删库备份问题

只要本机上面的容器卷存在,容器卷位置没有改变的情况下,就算容器被删除,重新打开后,创建的数据库,表都还存在

工作使用版启动容器方法

1
2
3
4
5
6
7
docker run -d -p 3306:3306 --privileged=true
-v /ggls/mysql/log:/var/log/mysql
-v /ggls/mysql/data:/var/lib/mysql
-v /ggls/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7
文章作者: gglss
文章链接: http://example.com/posts/58312.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用docker安装常用软件:mysql | GGLSS

使用docker安装常用软件:mysql

使用docker安装常用软件:mysql

以mysql 5.7为例

使用docker pull mysql:5.7拉取mysql 5.7镜像

使用镜像创建容器

简单版

使用docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7运行镜像创建容器

因为linux系统自己装了mysql,避免端口冲突,先运行ps -ef|grep mysql查询

使用docker ps查询容器编号

使用docker exec -it 容器编号 bash进入mysql容器

使用mysql -uroot -p,输入密码,登录mysql

验证

show databases

1
2
3
4
5
6
7
8
9
10
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
中文乱码问题
1
2
3
4
5
INSERT INTo t1 VALUES(3, "张三");
---
INSERT INTo t1 VALUES(3, "张三")
> 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
> 时间: 0.038s

因为docker默认编码字符集隐患

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>

解决中文乱码问题

在宿主机的/ggls/mysql/conf目录下vim my.cnf文件,通过容器卷同步给容器实例

1
2
3
4
5
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

改完后重启mysql实例

服务器输入SHOW VARIABLES LIKE 'character%';验证

docker安装好并run出容器后,先修改字符集编码在创建mysql库

删库备份问题

只要本机上面的容器卷存在,容器卷位置没有改变的情况下,就算容器被删除,重新打开后,创建的数据库,表都还存在

工作使用版启动容器方法

1
2
3
4
5
6
7
docker run -d -p 3306:3306 --privileged=true
-v /ggls/mysql/log:/var/log/mysql
-v /ggls/mysql/data:/var/lib/mysql
-v /ggls/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7
文章作者: gglss
文章链接: http://example.com/posts/58312.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/58345.html b/posts/58345.html index a765abf4b..0e0711055 100644 --- a/posts/58345.html +++ b/posts/58345.html @@ -1 +1 @@ -开发时遇到端口冲突解决办法 | GGLSS

开发时遇到端口冲突解决办法

解决办法

resources下面新建文件application.properties,名称不能变,只能是这个,运行时系统会自动获取这个端口数据

在里面输入代码数据

1
server.port=${port:8888}
文章作者: gglss
文章链接: http://example.com/posts/58345.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +开发时遇到端口冲突解决办法 | GGLSS

开发时遇到端口冲突解决办法

解决办法

resources下面新建文件application.properties,名称不能变,只能是这个,运行时系统会自动获取这个端口数据

在里面输入代码数据

1
server.port=${port:8888}
文章作者: gglss
文章链接: http://example.com/posts/58345.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/58353.html b/posts/58353.html index 0eac16500..3d5998fd8 100644 --- a/posts/58353.html +++ b/posts/58353.html @@ -1 +1 @@ -_主从容错切换迁移 | GGLSS

_主从容错切换迁移

_主从容错切换迁移

进入redis集群

注意:进入集群环境后,不能使用单机版的redis-cli -p 6381

因为这样会在增加数据时有error报错出现

使用set k1 v1错误是因为1号主机里面的编号是0到5460,超过了这个范围就会报错

正确进入的方法redis-cli -p 6381 -c

-c 的作用是优化路由

注:FLUSHALL:作用是清除之前添加的记录

集群检查

redis-cli –cluster check 8.142.144.75:6381

注:可以进入任意一台主机

主从容错切换迁移

主机宕机,从机自动切换成主机

文章作者: gglss
文章链接: http://example.com/posts/58353.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +_主从容错切换迁移 | GGLSS

_主从容错切换迁移

_主从容错切换迁移

进入redis集群

注意:进入集群环境后,不能使用单机版的redis-cli -p 6381

因为这样会在增加数据时有error报错出现

使用set k1 v1错误是因为1号主机里面的编号是0到5460,超过了这个范围就会报错

正确进入的方法redis-cli -p 6381 -c

-c 的作用是优化路由

注:FLUSHALL:作用是清除之前添加的记录

集群检查

redis-cli –cluster check 8.142.144.75:6381

注:可以进入任意一台主机

主从容错切换迁移

主机宕机,从机自动切换成主机

文章作者: gglss
文章链接: http://example.com/posts/58353.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/59561.html b/posts/59561.html index 5b409a71e..14831d4b2 100644 --- a/posts/59561.html +++ b/posts/59561.html @@ -1 +1 @@ -Shell运算符 | GGLSS

Shell运算符

基本语法
  1. $((运算式)) 或 $[运算式]
  2. expr + - * /

注意,运算符号间要有空格

举个加法栗子
1
2
expr 3 + 2
5
举栗子[(2+3)*4]

需要使用键盘左上角的`,把需要提前运算的包起来

1
expr `expr 2 + 3` \* 4

或者

1
2
s=$[(2+3)*4]
echo $s
文章作者: gglss
文章链接: http://example.com/posts/59561.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell运算符 | GGLSS

Shell运算符

基本语法
  1. $((运算式)) 或 $[运算式]
  2. expr + - * /

注意,运算符号间要有空格

举个加法栗子
1
2
expr 3 + 2
5
举栗子[(2+3)*4]

需要使用键盘左上角的`,把需要提前运算的包起来

1
expr `expr 2 + 3` \* 4

或者

1
2
s=$[(2+3)*4]
echo $s
文章作者: gglss
文章链接: http://example.com/posts/59561.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/6166.html b/posts/6166.html index c275e0b62..0fdc13977 100644 --- a/posts/6166.html +++ b/posts/6166.html @@ -1 +1 @@ -Ultimate Thread Group的使用 | GGLSS

Ultimate Thread Group的使用

前提

  • 安装插件,下载Custom Thread Groupsan插件

  • 添加Ultimate Thread Group

配置

  • Start Threads Count : 线程数
  • Initial Delay,sec : 线程延迟启动,0指的是立即启动;5代表五秒后启动
  • Startup Time,sec : 线程及时启动,0代表立即启动,5代表五秒之内启动完成
  • Hold Load For,sec : 启动后运行的时间,120代表运行120秒
  • Shutdown Time : 代表运行结束后停止的时间,0代表运行结束后立即停止,5代表运行结束后五秒内停止
文章作者: gglss
文章链接: http://example.com/posts/6166.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Ultimate Thread Group的使用 | GGLSS

Ultimate Thread Group的使用

前提

  • 安装插件,下载Custom Thread Groupsan插件

  • 添加Ultimate Thread Group

配置

  • Start Threads Count : 线程数
  • Initial Delay,sec : 线程延迟启动,0指的是立即启动;5代表五秒后启动
  • Startup Time,sec : 线程及时启动,0代表立即启动,5代表五秒之内启动完成
  • Hold Load For,sec : 启动后运行的时间,120代表运行120秒
  • Shutdown Time : 代表运行结束后停止的时间,0代表运行结束后立即停止,5代表运行结束后五秒内停止
文章作者: gglss
文章链接: http://example.com/posts/6166.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/622.html b/posts/622.html index 3647fe454..0745b65f6 100644 --- a/posts/622.html +++ b/posts/622.html @@ -1 +1 @@ -redis的4主4从缩容 | GGLSS

redis的4主4从缩容

redis的4主4从缩容

目的:6387和6388下线
检查集群情况获得6388的节点ID

redis-cli –cluster check 8.142.144.75:6382

从集群中将4号从节点6388删除

redis-cli –cluster del-node ip:从机端口 从机6388节点ID

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查

6388删除成功

将6387的槽号清空,重新分配

本例将清出来的槽号都给6381

使用redis-cli --cluster reshard ip:6381进行节点的重组

注:

上图中1输入的4096是6387主机所拥有的槽点数量,把他们全部拿出来分掉

上图的2输入的ID是接收6387主机所放出的槽点数的主机id

上图中3输入的ID是放出槽点数的6387主机的id

上图中4输入的done指的是已经输入完所有的节点

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
删除6387节点的主机

redis-cli –cluster del-node ip:端口 6387节点ID

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
文章作者: gglss
文章链接: http://example.com/posts/622.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +redis的4主4从缩容 | GGLSS

redis的4主4从缩容

redis的4主4从缩容

目的:6387和6388下线
检查集群情况获得6388的节点ID

redis-cli –cluster check 8.142.144.75:6382

从集群中将4号从节点6388删除

redis-cli –cluster del-node ip:从机端口 从机6388节点ID

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查

6388删除成功

将6387的槽号清空,重新分配

本例将清出来的槽号都给6381

使用redis-cli --cluster reshard ip:6381进行节点的重组

注:

上图中1输入的4096是6387主机所拥有的槽点数量,把他们全部拿出来分掉

上图的2输入的ID是接收6387主机所放出的槽点数的主机id

上图中3输入的ID是放出槽点数的6387主机的id

上图中4输入的done指的是已经输入完所有的节点

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
删除6387节点的主机

redis-cli –cluster del-node ip:端口 6387节点ID

使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
文章作者: gglss
文章链接: http://example.com/posts/622.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/62565.html b/posts/62565.html index ef0c97d74..a8a99d49c 100644 --- a/posts/62565.html +++ b/posts/62565.html @@ -1 +1 @@ -容器(三) | GGLSS

容器(三)

容器(三)

创建后台守护式容器

(问题):使用docker run -d ubuntu命令启动后台模式的容器ubuntu,然后用docker ps 查询提示没有找到运行的容器

Docker容器后台运行就必须有一个前台进程,不然容器没事做,会自杀

解决方法:将运行的程序以前台进程的方式运行
常见方式:命令行模式

查看容器日志

docker logs 容器id

查看容器的进程

docker top 容器id

查看容器内部细节

docker inspect 容器id

重新进入

  • 进入正在运行的容器并以命令行交互

    docker exec -it 容器id bashShell

  • 重新进入

    docker attach 容器id

(区别)
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止

1
2
3
4
5
6
7
8
9
10
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAME
S562278524cda   ubuntu    "bash"    20 minutes ago   Up 20 minutes             loving_dewdn
eycdee90a8c77d   ubuntu    "bash"    45 minutes ago   Up 15 minutes             ubuntu

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS   PORTS     NAMES

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#​shell

从容器内拷贝文件到主机

docker cp 容器id:容器地址 主机地址

1
2
3
4
5
6
7
8
9
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker cp 26191ecfb227:/tmp/a.txt /opt/ab.txt
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /opt/
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 8
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]#

导入和导出容器

  • export 导出容器的内容留作为一个tar归档文件[对应import命令]

    docker export 容器id > 自定义文件名.tar

  • import从tar包中的内容创建一个新的文件系统再导入为镜像[export]

    cat 文件名.tar | docker import - 自定义/镜像名:3.5(3.5是自定义)

1
2
3
4
5
6
7
8
9
10
11
12
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26191ecfb227 ubuntu "bash" 7 minutes ago Up 7 minutes quirky_jemison
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker export 26191ecfb227 > abcd.tar
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 73408
-rw-r--r-- 1 root root 75158016 Apr 27 15:21 abcd.tar
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 73408
-rw-r--r-- 1 root root 75158016 Apr 27 15:21 abcd.tar
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# cat abcd.tar | docker import - mytest/ubuntu:3.5
sha256:a92a27affdde8ad7f07bef2fdc0f04b8e3aeacb9d6919a77da2921d552ab940b
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytest/ubuntu 3.5 a92a27affdde 11 seconds ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker run -it mytest/ubuntu:3.5 bash
root@356e32244966:/#
root@356e32244966:/# cd /tmp/
root@356e32244966:/tmp# ll
total 8
drwxrwxrwt 2 root root 4096 Apr 27 07:13 ./
drwxr-xr-x 1 root root 4096 Apr 27 07:32 ../
-rw-r--r-- 1 root root 0 Apr 27 07:13 a.txt
root@356e32244966:/tmp#

文章作者: gglss
文章链接: http://example.com/posts/62565.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +容器(三) | GGLSS

容器(三)

容器(三)

创建后台守护式容器

(问题):使用docker run -d ubuntu命令启动后台模式的容器ubuntu,然后用docker ps 查询提示没有找到运行的容器

Docker容器后台运行就必须有一个前台进程,不然容器没事做,会自杀

解决方法:将运行的程序以前台进程的方式运行
常见方式:命令行模式

查看容器日志

docker logs 容器id

查看容器的进程

docker top 容器id

查看容器内部细节

docker inspect 容器id

重新进入

  • 进入正在运行的容器并以命令行交互

    docker exec -it 容器id bashShell

  • 重新进入

    docker attach 容器id

(区别)
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止

1
2
3
4
5
6
7
8
9
10
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAME
S562278524cda   ubuntu    "bash"    20 minutes ago   Up 20 minutes             loving_dewdn
eycdee90a8c77d   ubuntu    "bash"    45 minutes ago   Up 15 minutes             ubuntu

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS   PORTS     NAMES

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#​shell

从容器内拷贝文件到主机

docker cp 容器id:容器地址 主机地址

1
2
3
4
5
6
7
8
9
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker cp 26191ecfb227:/tmp/a.txt /opt/ab.txt
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /opt/
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 8
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]#

导入和导出容器

  • export 导出容器的内容留作为一个tar归档文件[对应import命令]

    docker export 容器id > 自定义文件名.tar

  • import从tar包中的内容创建一个新的文件系统再导入为镜像[export]

    cat 文件名.tar | docker import - 自定义/镜像名:3.5(3.5是自定义)

1
2
3
4
5
6
7
8
9
10
11
12
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26191ecfb227 ubuntu "bash" 7 minutes ago Up 7 minutes quirky_jemison
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker export 26191ecfb227 > abcd.tar
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 73408
-rw-r--r-- 1 root root 75158016 Apr 27 15:21 abcd.tar
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# ll
total 73408
-rw-r--r-- 1 root root 75158016 Apr 27 15:21 abcd.tar
-rw-r--r-- 1 root root 0 Apr 27 15:13 ab.txt
drwx--x--x 4 root root 4096 Dec 28 16:17 containerd
drwxr-xr-x 4 root root 4096 Dec 8 16:49 downfile
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# cat abcd.tar | docker import - mytest/ubuntu:3.5
sha256:a92a27affdde8ad7f07bef2fdc0f04b8e3aeacb9d6919a77da2921d552ab940b
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytest/ubuntu 3.5 a92a27affdde 11 seconds ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ opt]# docker run -it mytest/ubuntu:3.5 bash
root@356e32244966:/#
root@356e32244966:/# cd /tmp/
root@356e32244966:/tmp# ll
total 8
drwxrwxrwt 2 root root 4096 Apr 27 07:13 ./
drwxr-xr-x 1 root root 4096 Apr 27 07:32 ../
-rw-r--r-- 1 root root 0 Apr 27 07:13 a.txt
root@356e32244966:/tmp#

文章作者: gglss
文章链接: http://example.com/posts/62565.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/63387.html b/posts/63387.html index 237a2cc1a..90549eea8 100644 --- a/posts/63387.html +++ b/posts/63387.html @@ -1 +1 @@ -Arrivals Thread Group的使用 | GGLSS

Arrivals Thread Group的使用

前提

  • 安装插件,下载Custom Thread Groupsan插件

  • 添加Arrivals Thread Group

配置

  • Target Rate (arrivals/sec) : 相当于QPS, 输入10就是10QPS
  • Ramp Up Time (sec) : 在多少秒内达到最大的QPS,4代表在4秒内获得最大的QPS
  • Ramp-Up Steps Count : 代表并发数,4代表实现4次的并发
  • Hold Target Rate Time (sec) : 对系统压多长时间就输入多长时间 ,10代表压上10s
  • Concurrency Limit : 最大启动多少线程,100代表最多启动100线程
文章作者: gglss
文章链接: http://example.com/posts/63387.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Arrivals Thread Group的使用 | GGLSS

Arrivals Thread Group的使用

前提

  • 安装插件,下载Custom Thread Groupsan插件

  • 添加Arrivals Thread Group

配置

  • Target Rate (arrivals/sec) : 相当于QPS, 输入10就是10QPS
  • Ramp Up Time (sec) : 在多少秒内达到最大的QPS,4代表在4秒内获得最大的QPS
  • Ramp-Up Steps Count : 代表并发数,4代表实现4次的并发
  • Hold Target Rate Time (sec) : 对系统压多长时间就输入多长时间 ,10代表压上10s
  • Concurrency Limit : 最大启动多少线程,100代表最多启动100线程
文章作者: gglss
文章链接: http://example.com/posts/63387.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/63516.html b/posts/63516.html index 7a7b79080..7fb835cf6 100644 --- a/posts/63516.html +++ b/posts/63516.html @@ -1 +1 @@ -容器(二) | GGLSS

容器(二)

容器(二)

启动已经停止运行的容器

docker start 容器id/容器名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
9a1a43aee837 ubuntu "bush" 4 minutes ago Created admiring_wiles
cdee90a8c77d ubuntu "bash" 29 minutes ago Exited (0) 29 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 31 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker start cdee90a8c77d
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 5 minutes ago Up 5 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 30 minutes ago Up 3 seconds ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

重启容器

docker restart 容器id/容器名

停止容器

docker stop 容器id/容器名

强制停止容器

docker kill 容器id/容器名

删除已经停止的容器

docker rm 容器id

一次性删除多个容器

  • docker rm -f $(docker ps -a -q)
  • docker ps -a -q | xargs docker rm

注:xargs是linux系统的可变参数,把分隔符前面的结果传给xargs里面,然后执行分隔符后面的命令

1
2
3
4
5
6
7
8
9
10
11
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 20 minutes ago Up 20 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 45 minutes ago Up 15 minutes ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f
562278524cda
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

文章作者: gglss
文章链接: http://example.com/posts/63516.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +容器(二) | GGLSS

容器(二)

容器(二)

启动已经停止运行的容器

docker start 容器id/容器名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
9a1a43aee837 ubuntu "bush" 4 minutes ago Created admiring_wiles
cdee90a8c77d ubuntu "bash" 29 minutes ago Exited (0) 29 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 31 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker start cdee90a8c77d
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 5 minutes ago Up 5 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 30 minutes ago Up 3 seconds ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

重启容器

docker restart 容器id/容器名

停止容器

docker stop 容器id/容器名

强制停止容器

docker kill 容器id/容器名

删除已经停止的容器

docker rm 容器id

一次性删除多个容器

  • docker rm -f $(docker ps -a -q)
  • docker ps -a -q | xargs docker rm

注:xargs是linux系统的可变参数,把分隔符前面的结果传给xargs里面,然后执行分隔符后面的命令

1
2
3
4
5
6
7
8
9
10
11
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 20 minutes ago Up 20 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 45 minutes ago Up 15 minutes ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f
562278524cda
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

文章作者: gglss
文章链接: http://example.com/posts/63516.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/63722.html b/posts/63722.html index 2472630e7..d3c50a552 100644 --- a/posts/63722.html +++ b/posts/63722.html @@ -1 +1 @@ -jmeter自动化压力测试 | GGLSS

jmeter自动化压力测试

思路

  • jmeter脚本实现压测逻辑
  • Shell控制逻辑
  • 使用jmeter进行静默压测
文章作者: gglss
文章链接: http://example.com/posts/63722.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +jmeter自动化压力测试 | GGLSS

jmeter自动化压力测试

思路

  • jmeter脚本实现压测逻辑
  • Shell控制逻辑
  • 使用jmeter进行静默压测
文章作者: gglss
文章链接: http://example.com/posts/63722.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
公告
好好学习,天天向上
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/65365.html b/posts/65365.html index 62ddeb22d..9a07bfef9 100644 --- a/posts/65365.html +++ b/posts/65365.html @@ -1 +1 @@ -Shell流程控制 | GGLSS

Shell流程控制

if判断
基本语法
  • [ 条件判断式 ],中括号和条件判断式之间必须有空格

  • if后要有空格

1
2
3
4
5
6
7
8
if [ 条件判断式 ]:then
程序
fi
#或者
if[ 条件判断式 ]
then
程序
fi
举个栗子

输入一个数字,如果是1,则输出 banzhang zhen shuai,如果是2,则输出 cls zhen mei ,如果是其他,则什么都不输出

1
2
3
4
5
6
7
8
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
case 语句
基本语法
  • case行尾必须是单词 “in”,每一个模式匹配必须以右括号 “)” 结束
  • 双分号 “;;” 表示命令序列结束,相当于java的break
  • 最后的 “*)” 表示默认模式,相当于java的default
1
2
3
4
5
6
7
8
9
10
case $变量名 in  
"值 1")
如果变量的值等于1,执行程序1
;;
"值 2")
如果变量的值等于2,执行程序2
;;
*)
如果变量的值不是以上的值,则执行此程序
esac
举个栗子

输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其他,输出 renyao

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
case $1 in
"1")
echo "banzhang"
;;

"2")
echo "cls"
;;

*)
echo "renyou"
esac
For循环
基本语法1
1
2
3
4
for(( 初始值;循环控制添加;变量变化 ))
do
程序
done
举个栗子1

输出从1加到100的值

1
2
3
4
5
6
7
8
#!/bin/bash

s=0
for ((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo "cong1jiadao100:$s"
基本语法2
1
2
3
4
for 变量 in 值1 值2 值3...
do
程序
done
举个栗子2

打印所有输入参数

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

for i in "$*"
do
echo "banzhang xihuan $i"
done
#-----------------------------------
for j in "$@"
do
echo "banzhang xihuan $j"
done
while 循环
基本语法
1
2
3
4
while[ 条件判断式 ]
do
程序
done
举个栗子

输出从1加到100的值

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

i=1
while [ $i -le 100 ]
do
s=$[$s + $i]
i=$[$i + 1]
done

echo $s
read 读取控制台输入
基本语法
1
2
3
4
5
6
read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时的等待的时间(秒)
参数:
变量:指定读取值的变量名
举个栗子

提示7秒内,读取控制台输入的名称

1
2
3
4
5
#!/bin/bash

read -t 7 -p "input your name" NAME

echo $NAME
文章作者: gglss
文章链接: http://example.com/posts/65365.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell流程控制 | GGLSS

Shell流程控制

if判断
基本语法
  • [ 条件判断式 ],中括号和条件判断式之间必须有空格

  • if后要有空格

1
2
3
4
5
6
7
8
if [ 条件判断式 ]:then
程序
fi
#或者
if[ 条件判断式 ]
then
程序
fi
举个栗子

输入一个数字,如果是1,则输出 banzhang zhen shuai,如果是2,则输出 cls zhen mei ,如果是其他,则什么都不输出

1
2
3
4
5
6
7
8
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
case 语句
基本语法
  • case行尾必须是单词 “in”,每一个模式匹配必须以右括号 “)” 结束
  • 双分号 “;;” 表示命令序列结束,相当于java的break
  • 最后的 “*)” 表示默认模式,相当于java的default
1
2
3
4
5
6
7
8
9
10
case $变量名 in  
"值 1")
如果变量的值等于1,执行程序1
;;
"值 2")
如果变量的值等于2,执行程序2
;;
*)
如果变量的值不是以上的值,则执行此程序
esac
举个栗子

输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其他,输出 renyao

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
case $1 in
"1")
echo "banzhang"
;;

"2")
echo "cls"
;;

*)
echo "renyou"
esac
For循环
基本语法1
1
2
3
4
for(( 初始值;循环控制添加;变量变化 ))
do
程序
done
举个栗子1

输出从1加到100的值

1
2
3
4
5
6
7
8
#!/bin/bash

s=0
for ((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo "cong1jiadao100:$s"
基本语法2
1
2
3
4
for 变量 in 值1 值2 值3...
do
程序
done
举个栗子2

打印所有输入参数

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

for i in "$*"
do
echo "banzhang xihuan $i"
done
#-----------------------------------
for j in "$@"
do
echo "banzhang xihuan $j"
done
while 循环
基本语法
1
2
3
4
while[ 条件判断式 ]
do
程序
done
举个栗子

输出从1加到100的值

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

i=1
while [ $i -le 100 ]
do
s=$[$s + $i]
i=$[$i + 1]
done

echo $s
read 读取控制台输入
基本语法
1
2
3
4
5
6
read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时的等待的时间(秒)
参数:
变量:指定读取值的变量名
举个栗子

提示7秒内,读取控制台输入的名称

1
2
3
4
5
#!/bin/bash

read -t 7 -p "input your name" NAME

echo $NAME
文章作者: gglss
文章链接: http://example.com/posts/65365.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/6705.html b/posts/6705.html index ba2f8f083..41891e555 100644 --- a/posts/6705.html +++ b/posts/6705.html @@ -1 +1 @@ -Shell工具(一) | GGLSS

Shell工具(一)

Cut工具

用于剪切数据

基本用法

cut[选项参数] filename

说明:默认分隔符是制表符

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列
举个栗子

准备数据

1
2
3
4
5
6
7
8
[root@b09ed0cc2c9d local]# touch cut.txt
[root@b09ed0cc2c9d local]# vim cut.txt

dong shen
guan zhen
wo wo
lai lai
le le

切割第一列数据

1
2
3
4
5
6
[root@b09ed0cc2c9d local]# cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le

切割第二,三列

1
2
3
4
5
6
[root@b09ed0cc2c9d local]# cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le

在cut.txt文件切割出guan

1
2
3
4
5
6
7
8
9
10
11
12
[root@b09ed0cc2c9d local]# cat cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
[root@b09ed0cc2c9d local]#
[root@b09ed0cc2c9d local]# cat cut.txt | grep guan
guan zhen
[root@b09ed0cc2c9d local]# cat cut.txt | grep guan | cut -d " " -f 1
guan
[root@b09ed0cc2c9d local]#

选取系统PATH变量值,第二个“:”之后的所有路径

1
2
3
4
[root@b09ed0cc2c9d local]# echo $PATH
/usr/local/java/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root@b09ed0cc2c9d local]# echo $PATH | cut -d : -f 3- # 不加-表示第三列,加上-表示第三列之后
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

切割ifconfig后打印的IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@b09ed0cc2c9d local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 656 (656.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@b09ed0cc2c9d local]# ifconfig eth0 | grep "inet " | cut -d "t" -f 2 | cut -d " " -f 2
172.17.0.2
[root@b09ed0cc2c9d local]#
sed工具

一种流编辑器,一次处理一行内容

基本用法

sed [选项参数] command filename

选项参数说明

选项参数功能
-a直接在指定列模式上进行sed的动作编辑

命令功能描述

命令功能描述
a新增,a的后面可以接字串,在下一行出现
d删除
s查找并替换
举个栗子

数据准备

1
2
3
4
5
6
7
8
9
[root@b09ed0cc2c9d opt]# touch sed.txt
[root@b09ed0cc2c9d opt]# vim sed.txt

dong shen
guan zhen
wo wo
lai lai

le le

将mei nv 这个单词插入到 sed.txt 第二行下,打印

1
2
3
4
5
6
7
8
9
[root@b09ed0cc2c9d opt]# sed "2a mei nv" sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai

le le
[root@b09ed0cc2c9d opt]#

删除sed.txt文件所有包含 wo 的行

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# sed "/wo/d" sed.txt
dong shen
guan zhen
lai lai

le le
[root@b09ed0cc2c9d opt]#

将sed.txt文件中 wo 替换为 ni

1
2
3
4
5
6
7
8
[root@b09ed0cc2c9d opt]# sed "s/wo/ni/g" sed.txt
dong shen
guan zhen
ni ni
lai lai

le le
[root@b09ed0cc2c9d opt]#

注意:g表示global,全部替换

将sed.txt文件中的第二行删除并将wo替换成ni

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# sed -e "2d" -e "s/wo/ni/g" sed.txt
dong shen
ni ni
lai lai

le le
[root@b09ed0cc2c9d opt]#
文章作者: gglss
文章链接: http://example.com/posts/6705.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +Shell工具(一) | GGLSS

Shell工具(一)

Cut工具

用于剪切数据

基本用法

cut[选项参数] filename

说明:默认分隔符是制表符

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列
举个栗子

准备数据

1
2
3
4
5
6
7
8
[root@b09ed0cc2c9d local]# touch cut.txt
[root@b09ed0cc2c9d local]# vim cut.txt

dong shen
guan zhen
wo wo
lai lai
le le

切割第一列数据

1
2
3
4
5
6
[root@b09ed0cc2c9d local]# cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le

切割第二,三列

1
2
3
4
5
6
[root@b09ed0cc2c9d local]# cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le

在cut.txt文件切割出guan

1
2
3
4
5
6
7
8
9
10
11
12
[root@b09ed0cc2c9d local]# cat cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
[root@b09ed0cc2c9d local]#
[root@b09ed0cc2c9d local]# cat cut.txt | grep guan
guan zhen
[root@b09ed0cc2c9d local]# cat cut.txt | grep guan | cut -d " " -f 1
guan
[root@b09ed0cc2c9d local]#

选取系统PATH变量值,第二个“:”之后的所有路径

1
2
3
4
[root@b09ed0cc2c9d local]# echo $PATH
/usr/local/java/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root@b09ed0cc2c9d local]# echo $PATH | cut -d : -f 3- # 不加-表示第三列,加上-表示第三列之后
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

切割ifconfig后打印的IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@b09ed0cc2c9d local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 656 (656.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@b09ed0cc2c9d local]# ifconfig eth0 | grep "inet " | cut -d "t" -f 2 | cut -d " " -f 2
172.17.0.2
[root@b09ed0cc2c9d local]#
sed工具

一种流编辑器,一次处理一行内容

基本用法

sed [选项参数] command filename

选项参数说明

选项参数功能
-a直接在指定列模式上进行sed的动作编辑

命令功能描述

命令功能描述
a新增,a的后面可以接字串,在下一行出现
d删除
s查找并替换
举个栗子

数据准备

1
2
3
4
5
6
7
8
9
[root@b09ed0cc2c9d opt]# touch sed.txt
[root@b09ed0cc2c9d opt]# vim sed.txt

dong shen
guan zhen
wo wo
lai lai

le le

将mei nv 这个单词插入到 sed.txt 第二行下,打印

1
2
3
4
5
6
7
8
9
[root@b09ed0cc2c9d opt]# sed "2a mei nv" sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai

le le
[root@b09ed0cc2c9d opt]#

删除sed.txt文件所有包含 wo 的行

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# sed "/wo/d" sed.txt
dong shen
guan zhen
lai lai

le le
[root@b09ed0cc2c9d opt]#

将sed.txt文件中 wo 替换为 ni

1
2
3
4
5
6
7
8
[root@b09ed0cc2c9d opt]# sed "s/wo/ni/g" sed.txt
dong shen
guan zhen
ni ni
lai lai

le le
[root@b09ed0cc2c9d opt]#

注意:g表示global,全部替换

将sed.txt文件中的第二行删除并将wo替换成ni

1
2
3
4
5
6
7
[root@b09ed0cc2c9d opt]# sed -e "2d" -e "s/wo/ni/g" sed.txt
dong shen
ni ni
lai lai

le le
[root@b09ed0cc2c9d opt]#
文章作者: gglss
文章链接: http://example.com/posts/6705.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/7272.html b/posts/7272.html index 7cce10d56..9319d57a9 100644 --- a/posts/7272.html +++ b/posts/7272.html @@ -1 +1 @@ -使用docker的ubuntu容器安装code-server | GGLSS

使用docker的ubuntu容器安装code-server

搭建code-server

拉取Ubuntu 镜像

1
2
3
4
# 拉取镜像
docker pull aliyun
# 进入镜像
docker run --name [自定义名称] -u root --privileged=true -p 3300:8881 -v /opt/testubuntu/:/opt/main_file -it [镜像id]

安装code-server

github上下载安装包,解压后剪切到/home目录

运行code-server

1
2
3
4
# 找到bin目录下的code-server*
cd /home/code-server/bin
# 输入运行命令
export PASSWORD="123456" && ./code-server --host 0.0.0.0 --port 8881

然后在浏览器输入http://ip:3000查看搭建情况

但是这样搭建有问题

使用上面方法部署的code-server,因为是http的,导致一些功能不好用,比如写md文档无法预览

下面就是配置使用https运行

配置HTTPS

使用openssl为IP签发证书

安装openssl

一般的linux系统已经内置openssl,可以输入openssl进行查看,没有的话就需要安装

创建证书请求文件

新建openssl.cnf,并编辑如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CH
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ZJ
localityName = Locality Name (eg, city)
localityName_default = HangZhou
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = THS
commonName = Internet Widgits Ltd
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]

# 改成自己的域名
# DNS.1 = your_domain_name.com

# 改成自己的ip
IP.1 = 8.142.144.75
IP.2 = 0.0.0.0

生成私钥

san_domain_com 为最终生成的文件名,一般以服务器命名,可改。

1
openssl genrsa -out san_domain_com.key 2048

生成CSR文件

1
openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf

执行后,系统提示输入组织等信息,按[]内容提示输入如即可。

需要测试CSR文件是否生成成功

1
> openssl req -text -noout -in san_domain_com.csr

有下面的信息,说明生成成功

1
2
3
4
5
6
7
8
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=MN, L=Minneapolis, OU=Domain Control Validated, CN=zz
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
//...

自签名并生成证书

1
openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf

在当前目录会生成三个文件

1
2
3
4
5
san_domain_com.crt

san_domain_com.csr

san_domain_com.key

在用户电脑安装证书

.crt证书发给用户,用户双击进行安装,然后重启浏览器

code server启动

在code-server的bin目录下运行如下命令,设置端口号为8881,指定对应生成的crt和key密钥文件,即可正常访问https域名

1
2
3
4
# 给ssh创建密码
export PASSWORD="123456"
# 启动ssh
nohup ./code-server --port 8881 --host 0.0.0.0 --cert ../san_domain_com.crt --cert-key ../san_domain_com.key > vscode.log 2>&1 &

然后通过浏览器访问https://ip:3000

文章作者: gglss
文章链接: http://example.com/posts/7272.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +使用docker的ubuntu容器安装code-server | GGLSS

使用docker的ubuntu容器安装code-server

搭建code-server

拉取Ubuntu 镜像

1
2
3
4
# 拉取镜像
docker pull aliyun
# 进入镜像
docker run --name [自定义名称] -u root --privileged=true -p 3300:8881 -v /opt/testubuntu/:/opt/main_file -it [镜像id]

安装code-server

github上下载安装包,解压后剪切到/home目录

运行code-server

1
2
3
4
# 找到bin目录下的code-server*
cd /home/code-server/bin
# 输入运行命令
export PASSWORD="123456" && ./code-server --host 0.0.0.0 --port 8881

然后在浏览器输入http://ip:3000查看搭建情况

但是这样搭建有问题

使用上面方法部署的code-server,因为是http的,导致一些功能不好用,比如写md文档无法预览

下面就是配置使用https运行

配置HTTPS

使用openssl为IP签发证书

安装openssl

一般的linux系统已经内置openssl,可以输入openssl进行查看,没有的话就需要安装

创建证书请求文件

新建openssl.cnf,并编辑如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CH
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ZJ
localityName = Locality Name (eg, city)
localityName_default = HangZhou
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = THS
commonName = Internet Widgits Ltd
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]

# 改成自己的域名
# DNS.1 = your_domain_name.com

# 改成自己的ip
IP.1 = 8.142.144.75
IP.2 = 0.0.0.0

生成私钥

san_domain_com 为最终生成的文件名,一般以服务器命名,可改。

1
openssl genrsa -out san_domain_com.key 2048

生成CSR文件

1
openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf

执行后,系统提示输入组织等信息,按[]内容提示输入如即可。

需要测试CSR文件是否生成成功

1
> openssl req -text -noout -in san_domain_com.csr

有下面的信息,说明生成成功

1
2
3
4
5
6
7
8
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=MN, L=Minneapolis, OU=Domain Control Validated, CN=zz
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
//...

自签名并生成证书

1
openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf

在当前目录会生成三个文件

1
2
3
4
5
san_domain_com.crt

san_domain_com.csr

san_domain_com.key

在用户电脑安装证书

.crt证书发给用户,用户双击进行安装,然后重启浏览器

code server启动

在code-server的bin目录下运行如下命令,设置端口号为8881,指定对应生成的crt和key密钥文件,即可正常访问https域名

1
2
3
4
# 给ssh创建密码
export PASSWORD="123456"
# 启动ssh
nohup ./code-server --port 8881 --host 0.0.0.0 --cert ../san_domain_com.crt --cert-key ../san_domain_com.key > vscode.log 2>&1 &

然后通过浏览器访问https://ip:3000

文章作者: gglss
文章链接: http://example.com/posts/7272.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/7388.html b/posts/7388.html index 5a6948e4d..3ae360dd4 100644 --- a/posts/7388.html +++ b/posts/7388.html @@ -1 +1 @@ -java基础之方法和函数 | GGLSS

java基础之方法和函数

方法和函数

定义方式作用调用方式
函数public static void 函数名(){}封装指定功能的代码块函数名()
方法public [static] void 方法名(){}类的行为,对象可以执行的一些功能对象名.方法名

定义函数

使用static修饰的内容成为静态的内容

1
2
public static void function1(){
}

调用函数

1
function1()

定义方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void class className1{

String name;
//静态变量
static String age;

//静态方法
public static function1(){
}

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public function2(){
}
}

调用方法

  • 调用静态方法,不需要实例化
1
className1.function1()
  • 调用方法
1
className1的对象,需要实例化

静态方法注意事项:

  • 静态方法无法直接引用非静态的变量
  • 静态方法不能直接调用非静态的方法

代码块

  • 定义在方法内部,和局部变量处于平行的位置
  • 生命周期随着方法的调用而加载,随着方法的结束而消亡
  • 可以在局部代码块中定义一些使用范围和时间都很短的变量,用完就消失啦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void class className1{

String name;
static String age;

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public void function2(){

//定义代码块
{
int i = 100;
System.out.println("方法中的变量i=" + i);
}

}
}

构造代码块

  • 构造代码快写在和构造方法平行的位置
  • 只要创建对象,构造代码块就会执行,不论是采用有参的还是无参数的构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void class{
//有参构造
class(String name){
}
//无参构造
class(){
}
//构造代码块
{
int i=100;
System.out.println("构造代码块i=" + i);
}

}

静态代码块

  • 被static修饰的代码块称为静态代码块
  • 随着类的加载而加载
  • 静态代码块只执行一次,在程序中可以完成加载驱动等只执行一次的操作
1
2
3
4
5
public void className1{
static{
System.out.println("我是静态代码块i=" + i);
}
}
文章作者: gglss
文章链接: http://example.com/posts/7388.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +java基础之方法和函数 | GGLSS

java基础之方法和函数

方法和函数

定义方式作用调用方式
函数public static void 函数名(){}封装指定功能的代码块函数名()
方法public [static] void 方法名(){}类的行为,对象可以执行的一些功能对象名.方法名

定义函数

使用static修饰的内容成为静态的内容

1
2
public static void function1(){
}

调用函数

1
function1()

定义方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void class className1{

String name;
//静态变量
static String age;

//静态方法
public static function1(){
}

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public function2(){
}
}

调用方法

  • 调用静态方法,不需要实例化
1
className1.function1()
  • 调用方法
1
className1的对象,需要实例化

静态方法注意事项:

  • 静态方法无法直接引用非静态的变量
  • 静态方法不能直接调用非静态的方法

代码块

  • 定义在方法内部,和局部变量处于平行的位置
  • 生命周期随着方法的调用而加载,随着方法的结束而消亡
  • 可以在局部代码块中定义一些使用范围和时间都很短的变量,用完就消失啦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void class className1{

String name;
static String age;

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public void function2(){

//定义代码块
{
int i = 100;
System.out.println("方法中的变量i=" + i);
}

}
}

构造代码块

  • 构造代码快写在和构造方法平行的位置
  • 只要创建对象,构造代码块就会执行,不论是采用有参的还是无参数的构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void class{
//有参构造
class(String name){
}
//无参构造
class(){
}
//构造代码块
{
int i=100;
System.out.println("构造代码块i=" + i);
}

}

静态代码块

  • 被static修饰的代码块称为静态代码块
  • 随着类的加载而加载
  • 静态代码块只执行一次,在程序中可以完成加载驱动等只执行一次的操作
1
2
3
4
5
public void className1{
static{
System.out.println("我是静态代码块i=" + i);
}
}
文章作者: gglss
文章链接: http://example.com/posts/7388.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/7613.html b/posts/7613.html index bf11444d1..5c2ecf197 100644 --- a/posts/7613.html +++ b/posts/7613.html @@ -1 +1 @@ -需要参数才能访问的get请求 | GGLSS

需要参数才能访问的get请求

编写需要参数才能访问的get请求

使用参数就要用到@RequestParam 参数类型 参数变量,可以有多个参数

这个接口还是在MyGetMethod类里面编写方法,有两种方法

第一种url:key=value&&key=value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 开发一个需要参数才能访问的get请求
* 模拟获取商品列表
*/
@RequestMapping(value = "/get/with/param", method = RequestMethod.GET)
@ApiOperation(value = "需要参数才能访问的get请求的第一种实现方法", httpMethod = "GET")
public Map<String, Integer> getList(@RequestParam Integer start,
@RequestParam Integer end){

Map<String, Integer> myList = new HashMap<>();

myList.put("鞋",400);
myList.put("电脑",5000);
myList.put("手机",3500);

return myList;

}

方法二url: ip:port/get/with/param/10/20

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

/**
* 第二种需要携带参数访问的get请求
*/

@RequestMapping(value = "/get/with/param/{start}/{end}", method = RequestMethod.GET)
@ApiOperation(value = "需要参数才能访问的get请求的第二种实现方法", httpMethod = "GET")
public Map<String,Integer> myGetList(@PathVariable Integer start,
@PathVariable Integer end){

Map<String, Integer> myList = new HashMap<>();

myList.put("鞋",400);
myList.put("电脑",5000);
myList.put("手机",3500);

return myList;
}
文章作者: gglss
文章链接: http://example.com/posts/7613.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file +需要参数才能访问的get请求 | GGLSS

需要参数才能访问的get请求

编写需要参数才能访问的get请求

使用参数就要用到@RequestParam 参数类型 参数变量,可以有多个参数

这个接口还是在MyGetMethod类里面编写方法,有两种方法

第一种url:key=value&&key=value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 开发一个需要参数才能访问的get请求
* 模拟获取商品列表
*/
@RequestMapping(value = "/get/with/param", method = RequestMethod.GET)
@ApiOperation(value = "需要参数才能访问的get请求的第一种实现方法", httpMethod = "GET")
public Map<String, Integer> getList(@RequestParam Integer start,
@RequestParam Integer end){

Map<String, Integer> myList = new HashMap<>();

myList.put("鞋",400);
myList.put("电脑",5000);
myList.put("手机",3500);

return myList;

}

方法二url: ip:port/get/with/param/10/20

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

/**
* 第二种需要携带参数访问的get请求
*/

@RequestMapping(value = "/get/with/param/{start}/{end}", method = RequestMethod.GET)
@ApiOperation(value = "需要参数才能访问的get请求的第二种实现方法", httpMethod = "GET")
public Map<String,Integer> myGetList(@PathVariable Integer start,
@PathVariable Integer end){

Map<String, Integer> myList = new HashMap<>();

myList.put("鞋",400);
myList.put("电脑",5000);
myList.put("手机",3500);

return myList;
}
文章作者: gglss
文章链接: http://example.com/posts/7613.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/posts/7883.html b/posts/7883.html index e9d71056a..71b17408a 100644 --- a/posts/7883.html +++ b/posts/7883.html @@ -1,4 +1,4 @@ -_3主3从的`Redis集群`搭建(上) | GGLSS

_3主3从的`Redis集群`搭建(上)

_3主3从的Redis集群搭建(上)

  • 关闭防火墙,启动docker
  • 新建6个docker容器docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
    • docker run 创建并运行docker容器实例
    • –name redis-node-6 容器名字
    • –net host 使用宿主机的IP和端口,默认
    • –privileged=true 获取宿主机root用户权限
    • -v /data/redis/share/redis-node-6:/data 容器卷,宿主机地址:docker内部地址
    • redis:6.0.8 redis镜像和版本号
    • –cluster-enabled yes 开启redis集群
    • –appendonly yes 开启持久化
    • –port 6386 redis端口号
1
2
3
4
5
6
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

运行成功,使用docker ps查看

  • 进入容器redis-node-1并为6台机器构建集群关系

    • 进入一台redis进行配置docker exec -it redis-node-1 bash

    • #进入后执行
      +_3主3从的`Redis集群`搭建(上) | GGLSS

      _3主3从的`Redis集群`搭建(上)

      _3主3从的Redis集群搭建(上)

      • 关闭防火墙,启动docker
      • 新建6个docker容器docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
        • docker run 创建并运行docker容器实例
        • –name redis-node-6 容器名字
        • –net host 使用宿主机的IP和端口,默认
        • –privileged=true 获取宿主机root用户权限
        • -v /data/redis/share/redis-node-6:/data 容器卷,宿主机地址:docker内部地址
        • redis:6.0.8 redis镜像和版本号
        • –cluster-enabled yes 开启redis集群
        • –appendonly yes 开启持久化
        • –port 6386 redis端口号
      1
      2
      3
      4
      5
      6
      docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
      docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
      docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
      docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
      docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
      docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

      运行成功,使用docker ps查看

      • 进入容器redis-node-1并为6台机器构建集群关系

        • 进入一台redis进行配置docker exec -it redis-node-1 bash

        • #进入后执行
           redis-cli --cluster create 8.142.144.75:6381 8.142.144.75:6382 8.142.144.75:6383 8.142.144.75:6384 8.142.144.75:6385 8.142.144.75:6386 --cluster-replicas 1
           
            --cluster create	构建集群
          @@ -6,4 +6,4 @@
            
           --cluster-replicas 1 表示为每个master创建一个slave节点
           # 注意:上面的ip为真实IP
          -

        有下面的绿色ok字样显示运行成功

      如果运行不成功,一直显示Waiting for the cluster to join.. 一直………………………………….,则是端口没有全部开放,防火墙也要开放端口,以阿里云为例

      就是需要在安全组上面配置63816386的6个端口,还需要配置1638116386的6个端口,共12个端口都要开放,不然会一直提示等待

      • 一切OK的话,3主3从搭建搞定
      文章作者: gglss
      文章链接: http://example.com/posts/7883.html
      版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

      评论
      WalineValine
      控制面板×

      性能设置

      禁用模糊效果
      开启帧率检测(刷新后生效)

      主题设置

      显示aplayer
      落樱特效
      明暗模式自动切换
      自动主题色(跟随文章封面)
      未完工
      固定导航栏
      ###

      主题色

      背景设置

      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

      图片(手机)

      图片(电脑)

      渐变色

      纯色

      文章统计

      监控

      文章统计

      访问统计显示不出来请刷新页面

      关于

      Hexo-theme-Acryple v1.0.100
      Ariasaka Console v0.01
      欢迎反馈!
      🍭查看新品🍬
      \ No newline at end of file +

    有下面的绿色ok字样显示运行成功

如果运行不成功,一直显示Waiting for the cluster to join.. 一直………………………………….,则是端口没有全部开放,防火墙也要开放端口,以阿里云为例

就是需要在安全组上面配置63816386的6个端口,还需要配置1638116386的6个端口,共12个端口都要开放,不然会一直提示等待

  • 一切OK的话,3主3从搭建搞定
文章作者: gglss
文章链接: http://example.com/posts/7883.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS

评论
WalineValine
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
未完工
固定导航栏
###

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

文章统计

监控

文章统计

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Ariasaka Console v0.01
欢迎反馈!
空降评论复制本文地址
随便逛逛昼夜切换繁简转换阅读模式版权声明博客设置进入全屏
🍭查看新品🍬
\ No newline at end of file diff --git a/random/random.js b/random/random.js index 3b366c761..03937b0a6 100644 --- a/random/random.js +++ b/random/random.js @@ -1 +1 @@ -var posts=["posts/546861677.html","posts/13923.html","posts/1672051471.html","posts/44160.html","posts/26527.html","posts/53812.html","posts/4851.html","posts/408340008.html","posts/36554.html","posts/53299.html","posts/7883.html","posts/13844.html","posts/42656.html","posts/58353.html","posts/16766.html","posts/53508.html","posts/55605.html","posts/18767.html","posts/54899.html","posts/51796.html","posts/622.html","posts/58312.html","posts/32161.html","posts/50699.html","posts/1351.html","posts/26726.html","posts/62565.html","posts/63516.html","posts/42395.html","posts/25343.html","posts/55045.html","posts/50581.html","posts/7388.html","posts/16468.html","posts/47564.html","posts/34655.html","posts/55332.html","posts/31621.html","posts/20480.html","posts/11783.html","posts/32473.html","posts/43612.html","posts/43613.html","posts/52845.html","posts/63722.html","posts/55320.html","posts/3219.html","posts/26691.html","posts/49262.html","posts/55393.html","posts/527.html","posts/48990.html","posts/34250.html","posts/29537.html","posts/31868.html","posts/15488.html","posts/12932.html","posts/48851.html","posts/40953.html","posts/22551.html","posts/56883.html","posts/1817691161.html","posts/7272.html","posts/23767.html","posts/2166.html","posts/28702.html","posts/12080.html","posts/42174.html","posts/1.html","posts/41091.html","posts/27832.html","posts/4654.html","posts/6705.html","posts/50013.html","posts/1.html","posts/65365.html","posts/59561.html","posts/58345.html","posts/55957.html","posts/557.html","posts/38168.html","posts/24951.html","posts/7613.html","posts/15521.html","posts/16785.html","posts/2943790551.html","posts/42075.html","posts/63387.html","posts/6166.html"];function toRandomPost(){pjax.loadUrl("/"+posts[Math.floor(Math.random()*posts.length)])} \ No newline at end of file +var posts=["posts/546861677.html","posts/1672051471.html","posts/44160.html","posts/13923.html","posts/26527.html","posts/36554.html","posts/53299.html","posts/7883.html","posts/13844.html","posts/42656.html","posts/16766.html","posts/58353.html","posts/53508.html","posts/55605.html","posts/51796.html","posts/18767.html","posts/622.html","posts/58312.html","posts/32161.html","posts/50699.html","posts/1351.html","posts/26726.html","posts/63516.html","posts/62565.html","posts/42395.html","posts/55045.html","posts/25343.html","posts/54899.html","posts/53812.html","posts/4851.html","posts/408340008.html","posts/52845.html","posts/55320.html","posts/63722.html","posts/3219.html","posts/26691.html","posts/49262.html","posts/55393.html","posts/527.html","posts/34250.html","posts/48990.html","posts/29537.html","posts/31868.html","posts/15488.html","posts/12932.html","posts/48851.html","posts/40953.html","posts/56883.html","posts/22551.html","posts/1817691161.html","posts/50581.html","posts/7388.html","posts/16468.html","posts/47564.html","posts/34655.html","posts/55332.html","posts/31621.html","posts/20480.html","posts/11783.html","posts/32473.html","posts/43612.html","posts/43613.html","posts/7272.html","posts/23767.html","posts/2166.html","posts/38168.html","posts/4654.html","posts/41091.html","posts/27832.html","posts/6705.html","posts/50013.html","posts/65365.html","posts/59561.html","posts/55957.html","posts/28702.html","posts/12080.html","posts/42174.html","posts/1.html","posts/1.html","posts/58345.html","posts/557.html","posts/24951.html","posts/15521.html","posts/7613.html","posts/16785.html","posts/42075.html","posts/2943790551.html","posts/63387.html","posts/6166.html"];function toRandomPost(){pjax.loadUrl("/"+posts[Math.floor(Math.random()*posts.length)])} \ No newline at end of file diff --git a/search.xml b/search.xml index 649a005b4..e39a3588a 100644 --- a/search.xml +++ b/search.xml @@ -44,32 +44,6 @@ 旅游 - - 长难句一 - /posts/13923.html - 原句
		Curbs on business-method claims would be a dramatic about-face, because it was the 

Federal Circuit itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

【2010英语一Text2】
- -

提取单词

business: 商业

-

claim: 宣称,声称,断言

-

dramatic: 巨大而广阔的

-

about-face: n. (思想、态度、行为等)彻底改变; v. 向后转(同 about-turn)

-

federal: adj. 联邦的,政府的

-

分割

Curbs on business-method claims would be a dramatic about-face, because it was the Federal Circuit itself that introduced such patents with its 1998 decision in the so-called State Street Bank case,

-
<span style="font-size:2rem; background:yellow; color:red;">**Bang! Bang! Banki Banki Seiki Banki!**</span>
- -

State Street Bank case,

-
 Curbs on business-method <font color=#0d26e5>claims</font> would be a dramatic about-face, because it was the  Federal Circuit 
-
-

itself that introduced such patents with its 1998 decision in the so-called

-

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

-]]>
- - 学习日常 - - - English - -
真正厉害的人都戒掉了玻璃心 /posts/1672051471.html @@ -157,6 +131,32 @@

patent:专利,专利权

circuit:环行、电路、巡回

+]]> + + 学习日常 + + + English + +
+ + 长难句一 + /posts/13923.html + 原句
		Curbs on business-method claims would be a dramatic about-face, because it was the 

Federal Circuit itself that introduced such patents with its 1998 decision in the so-called

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

【2010英语一Text2】
+ +

提取单词

business: 商业

+

claim: 宣称,声称,断言

+

dramatic: 巨大而广阔的

+

about-face: n. (思想、态度、行为等)彻底改变; v. 向后转(同 about-turn)

+

federal: adj. 联邦的,政府的

+

分割

Curbs on business-method claims would be a dramatic about-face, because it was the Federal Circuit itself that introduced such patents with its 1998 decision in the so-called State Street Bank case,

+
<span style="font-size:2rem; background:yellow; color:red;">**Bang! Bang! Banki Banki Seiki Banki!**</span>
+ +

State Street Bank case,

+
 Curbs on business-method <font color=#0d26e5>claims</font> would be a dramatic about-face, because it was the  Federal Circuit 
+
+

itself that introduced such patents with its 1998 decision in the so-called

+

State Street Bank case, approving a patent on a way of pooling mutual-fund assets.

]]>
学习日常 @@ -199,64 +199,6 @@ css
- - git提示Timed out的解决办法 - /posts/53812.html - 报错代码

运行git代码会提示Timed out错误

-
使用git,会发生报错:Failed to connect to github.com port 443 after 21098 ms: Timed out
- -

解决办法

设置代理

-
git config --global https.proxy
- -

取消代理

-
git config --global --unset https.proxy
- -

然后输入git 命令使用

-]]>
- - 经验分享 - - - Git - -
- - 使用pip install报错的解决办法 - /posts/4851.html - 报错提示

今天使用PyCharm下载一个模块pip.exe install locust,有错误提示

-
https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
// 报错位置
ERROR: Failed building wheel for psutil

ERROR: Could not build wheels for psutil, which is required to install pyproject.toml-based projects
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
-

原因

-

缺少对应的whl文件

-
-

解决办法

碰到了这个错误ERROR: Failed building wheel for psutil,就需要下载psutil.whl

-

下载网站点击进入网站

-

下载psutil-5.9.0-cp38-cp38-win_amd64.whl文件

-

然后使用(pip install 文件的绝对路径)进行安装,然后使用pip.exe install locust正常安装

-

pip.exe install D:\Appium\psutil-5.9.0-cp38-cp38-win_amd64.whl

pip.exe install locust

-]]>
- - 经验分享 - - - error - -
- - Mac提示安装包损坏 - /posts/408340008.html - Mac 提示文件已损坏,您应该将它移到废纸篓

解决办法:

-

在终端输入

-

sudo xattr -d com.apple.quarantine /Applications/PicGo.app

-

/后面是安装路径

-

然后输入密码

-]]>
- - 工具教程 - - - mac - -
_3主3从的`Redis集群`搭建(下) /posts/36554.html @@ -443,6 +385,33 @@ redis-cli --cluster create 8.142.144.75:6381 8.142.144.75:6382 8.142.144.75:6383

主从复制测试

主机创建数据库,创建表,插入数据,搜索表的数据

从机直接搜索标的数据

+]]> + + 工具教程 + + + docker + +
+ + docker 帮助启动类命令(一) + /posts/16766.html + docker 帮助启动类命令(一)

启动docker

+
+

systemctl start docker

+
+

停止docker

+
+

systemctl stop docker

+
+

查看docker状态

+
+

systemctl status docker

+
+

重启 docker,没有任何提示说明启动成功

+
+

systemctl restart docker

+
]]>
工具教程 @@ -486,33 +455,6 @@ redis-cli --cluster create 8.142.144.75:6381 8.142.144.75:6382 8.142.144.75:6383

主从容错切换迁移

主机宕机,从机自动切换成主机

-]]> - - 工具教程 - - - docker - -
- - docker 帮助启动类命令(一) - /posts/16766.html - docker 帮助启动类命令(一)

启动docker

-
-

systemctl start docker

-
-

停止docker

-
-

systemctl stop docker

-
-

查看docker状态

-
-

systemctl status docker

-
-

重启 docker,没有任何提示说明启动成功

-
-

systemctl restart docker

-
]]>
工具教程 @@ -583,6 +525,65 @@ redis-cli --cluster create 8.142.144.75:6381 8.142.144.75:6382 8.142.144.75:6383

没有tag就是最新版

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker pull redis:6.0.8
6.0.8: Pulling from library/redis
bb79b6b2107f: Pull complete
1ed3521a5dcb: Pull complete
5999b99cee8f: Pull complete
3f806f5245c9: Pull complete
f8a4497572b2: Pull complete
eafe3b6b8d06: Pull complete
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Downloaded newer image for redis:6.0.8
docker.io/library/redis:6.0.8
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

+]]> + + 工具教程 + + + docker + +
+ + redis的3主3从扩容 + /posts/51796.html + redis的3主3从扩容

首先添加两个redis

# 创建redis-node-7
docler run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
# 创建redis-node-8
docler run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
+ +

注:在阿里云的安全组和防火墙上添加6387,16387 6388,16388四个端口

+

配置步骤:

执行docker exec -it redis-node-1 bash 进入redis-node-1里面
执行redis-cli --cluster add-node 8.142.144.75:6387 8.142.144.75:6381
+ +
+ + + +

6387 新加入的节点

+

6381 相当于6387的领路人

+
使用redis-cli --cluster check 8.142.144.75:6381检查
+ +
+ +
重新分配槽号
+

redis-cli –cluster reshard IP地址:端口号

+
+
+ +
+ +

注:上图的1指的是:对主机数平分16384个节点,16384/主机数(包含想要添加的主机)

+

注:上图的2指的是:新加入的6387节点的ID

+
+ +
+ +

all:表示全部进行重新分配

+

在重新加载过程会碰到Do you want to proceed with the proposed reshard plan (yes/no)?一句话,选择yes就可以

+
+ +
+ +
检查集群情况
+ +
+ +
为主节点6387分配从节点6388
+

redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID

+
+
+ +
+ +
检查集群情况
+ +
]]>
工具教程 @@ -625,236 +626,193 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for
- Butterfly美化记录 - /posts/54899.html - -

注:这个魔改转载于Ariasakaの小窝

+ redis的4主4从缩容 + /posts/622.html + redis的4主4从缩容
目的:6387和6388下线
检查集群情况获得6388的节点ID
+

redis-cli –cluster check 8.142.144.75:6382

-

导航栏

分离菜单栏和搜索栏

让搜索栏放在最右侧,其他的导航栏居中

-

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug:

-
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
- if (theme.algolia_search.enable || theme.local_search.enable)
- #search-button
- a.site-page.social-icon.search
- i.fas.fa-search.fa-fw
- span=' '+_p('search.title')
!=partial('includes/header/menu_item', {}, {cache: true})
#nav-right
+ if (theme.algolia_search.enable || theme.local_search.enable)
+ #search-button
+ a.site-page.social-icon.search
+ i.fas.fa-search.fa-fw
- #toggle-menu
- a.site-page
- i.fas.fa-bars.fa-fw
+ #toggle-menu
+ a.site-page
+ i.fas.fa-bars.fa-fw
+
+ +
-

修改的文件nav.pug,版本为Butterfly 4.10.0

-
nav#nav
span#blog-info
a(href=url_for('/') title=config.title)
if theme.nav.logo
img.site-icon(src=url_for(theme.nav.logo))
if theme.nav.display_title
span.site-name=config.title

#menus
!=partial('includes/header/menu_item', {}, {cache: true})

#nav-right
if (theme.algolia_search.enable || theme.local_search.enable || theme.docsearch.enable)
#search-button
a.site-page.social-icon.search(href="javascript:void(0);")
i.fas.fa-search.fa-fw

#toggle-menu
a.site-page
i.fas.fa-bars.fa-fw
+
从集群中将4号从节点6388删除
+

redis-cli –cluster del-node ip:从机端口 从机6388节点ID

+
+
+ +
+
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
+ +
+

6388删除成功

+
将6387的槽号清空,重新分配

本例将清出来的槽号都给6381

+

使用redis-cli --cluster reshard ip:6381进行节点的重组

+
+ +
-

居中

使用自定义[blogRoot]/self/css/meihua.css,添加下面的代码

-
#nav-right{
flex:1 1 auto;
justify-content: flex-end;
margin-left: auto;
display: flex;
flex-wrap:nowrap;
}
- -

去掉导航栏下的蓝色长条

在自定义[blogRoot]/self/css/meihua.css里面添加

-
#nav *::after{
background-color: transparent!important;
}
- -

子菜单横向布局

在自定义[blogRoot]/self/css/meihua.css里面添加

-
/* ----------导航栏横向下拉框---------- */

.menus_item_child li:not(#sidebar-menus li){
float: left;
border-radius: 6px!important;
-webkit-border-radius: 6px!important;
-moz-border-radius: 6px!important;
-ms-border-radius: 6px!important;
-o-border-radius: 6px!important;
}
.menus_item_child:not(#sidebar-menus ul){
/*left:calc(-150%)!important;*//*这是估算值,为了保持元素居中的,如果不合适可以自己调*/
left:50%;
translate:-50%;
}
- -

显示标题

修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug

-
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]

#menus
!=partial('includes/header/menu_item', {}, {cache: true})
+ center(id="name-container")
+ a(id="page-name" href="javascript:scrollToTop()") PAGE_NAME
...
- -

[blogRoot]/self/js/创建jquery.js文件,添加以下代码

-
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
- -

然后添加nav.js,并且按照注释修改配置

-
//js有一个小问题:就是只要鼠标滚动不论哪里都会响应,即便你滚动的是子元素

//2022.9.11 已修复,需要jq,请自行引入
document.getElementById("name-container").setAttribute("style", "display:none");

var position = $(window).scrollTop();

$(window).scroll(function () {

var scroll = $(window).scrollTop();

if (scroll > position) {


document.getElementById("name-container").setAttribute("style", "");
document.getElementsByClassName("menus_items")[1].setAttribute("style", "display:none!important");

} else {


document.getElementsByClassName("menus_items")[1].setAttribute("style", "");
document.getElementById("name-container").setAttribute("style", "display:none");

}

position = scroll;

});
function scrollToTop(){
document.getElementsByClassName("menus_items")[1].setAttribute("style","");
document.getElementById("name-container").setAttribute("style","display:none");
btf.scrollToDest(0, 500);
}
//修复没有弄右键菜单的童鞋无法回顶部的问题
document.getElementById("page-name").innerText = document.title.split(" | Ariasakaの小窝")[0];
/*这里是去掉你的网站全局名称的设置,如果你不需要去掉,你可以写成:
document.getElementById("page-name").innerText=document.title

或者把你的网站的分隔符和全局网站名称加上去*/

- -

最后添加如下css,按照注释修改参数:

-
/*
2022.10.4更新:
根据我发现的没有自适应,间距不合理问题进行调整,如果用了这个的朋友们建议改一改
*/
#page-name::before{
font-size:18px;
position: absolute;
width:100%;
height:100%;
border-radius: 8px;
color:white!important;
top:0;
left:0;
content:'回到顶部';
background-color: var(--lyx-theme);
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
opacity: 0;
box-shadow: 0 0 3px var(--lyx-theme);
line-height: 45px; /*如果垂直位置不居中可以微调此值,也可以删了*/
}
#page-name:hover:before{
opacity: 1;
}
@media screen and (max-width:900px){
#page-name,#menus{
display:none!important;
}
}

#name-container{
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
#name-container:hover{
scale:1.03
}
#page-name{
position: relative;
padding:10px 30px/*如果文字间隔不合理可以微调修改,第二个是水平方向的padding,第一个是垂直的*/
}
#nav{
padding: 0 20px;
}

- -

导航栏显示haver颜色

在自定义[blogRoot]/self/css/meihua.css里面添加

-
/* ----------修改导航栏的haver---------- */

.site-page {
padding: 5px;
margin: 3px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
.site-page:hover {
background-color: var(--gglss-theme);
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 5px;
}
.site-page.child:hover {
background-color: var(--gglss-theme)!important;
box-shadow: 0 0 3px var(--gglss-theme)!important;
border-radius: 4px;
}

/* ----------网站标题部分的增强版---------- */
#site-name::before{
opacity: 0;
background-color: var(--gglss-theme)!important;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-ms-border-radius: 8px;
-o-border-radius: 8px;
transition: .3s;
-webkit-transition: .3s;
-moz-transition: .3s;
-ms-transition: .3s;
-o-transition: .3s;
position:absolute;
top:0!important;
right:0!important;
width:100%;
height:100%;
content: "\f015";
box-shadow: 0 0 5px var(--gglss-theme);
font-family: "Font Awesome 6 Free";
text-align: center;
color:white;
line-height:34px;/*如果有溢出或者垂直不居中的现象微调一下这个参数*/
font-size: 18px;/*根据个人喜好*/
}
#site-name:hover::before{
opacity: 1;
scale:1.03;
}
#site-name{
position: relative;
font-size: 24px; /*一定要把字体调大点,否则效果惨不忍睹!*/
}
:root{
--gglss-theme:#49B1F5 /*我的主题色*/
}

- -

侧边栏分类归档美化

修改 aside_archives文件

打开 [you_blog]\themes\butterfly\scripts\helpers\aside_archives.js 修改第 92 行左右。

-
result += transform ? transform(item.name) : item.name
result += '</span>'

if (showCount) {
- result += `<span class="card-archive-list-count">${item.count}</span>`
+ result += `<div class="card-archive-list-count-group"><span class="card-archive-list-count">${item.count}</span><span>篇</span></div>`
}
result += '</a>'
result += '</li>'

- -

增加css

在自定义[blogRoot]/self/css/meihua.css文件中添加如下代码:

-
/* 侧栏归档样式start */
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.5rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-count-group {
display: flex;
flex-direction: row;
align-items: baseline;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child {
width: fit-content;
margin-left: 4px;
}
span.card-archive-list-count {
width: auto;
text-align: left;
font-size: 1.1rem;
line-height: 0.9;
font-weight: 700;
}
.card-archive-list-date {
font-size: 14px;
opacity: 0.6;
}
li.card-category-list-item {
flex: 0 0 31%;
}
li.card-archive-list-item {
flex: 0 0 48%;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
color: #fff;
/* background-color: #3b70fc; */
background-color: #49B1F5; /*侧边栏的鼠标悬浮颜色*/
box-shadow: 0 8px 12px -3px #4259ef23;
border-radius: 8px;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
@media screen and (min-width: 1300px) {
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
transform: scale(1.03);
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a:active {
transform: scale(0.97);
}
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a {
border-radius: 8px;
margin: 4px 0;
display: flex;
flex-direction: column;
align-content: space-between;
border: 1px solid #e3e8f7;
}
#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child,
#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child {
width: auto;
flex: inherit;
}
#aside-content .card-archives ul.card-archive-list,
#aside-content .card-categories ul.card-category-list {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
}
/* 侧栏归档样式end */

+

注:

+

上图中1输入的4096是6387主机所拥有的槽点数量,把他们全部拿出来分掉

+

上图的2输入的ID是接收6387主机所放出的槽点数的主机id

+

上图中3输入的ID是放出槽点数的6387主机的id

+

上图中4输入的done指的是已经输入完所有的节点

+
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
+ +
-

添加夜间模式的转换动画

-

转自雷雷屋头

+
删除6387节点的主机
+

redis-cli –cluster del-node ip:端口 6387节点ID

-

新建 sun_moon.pug

[you_blog]\themes\butterfly\layout\includes\custom\ 文件夹下,新建 sun_moon.pug 文件

-
svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0')
symbol#icon-sun(viewBox='0 0 1024 1024')
path(d='M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z', fill='#FFD878', p-id='8420')
path(d='M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z', fill='#FFE4A9', p-id='8421')
path(d='M512 109.248L626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z', fill='#4D5152', p-id='8422')
path(d='M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z', fill='#4D5152', p-id='8423')
symbol#icon-moon(viewBox='0 0 1024 1024')
path(d='M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z', fill='#FFB531', p-id='11345')
path(d='M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z', fill='#030835', p-id='11346')


- -

新建css

[blogRoot]/self/css/新建sun_moon.css,增加下面的代码

-
/* 白天夜晚切换动画start */
.Cuteen_DarkSky, .Cuteen_DarkSky:before {
content: '';
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 88888888;
}
.Cuteen_DarkSky {
background: linear-gradient(#feb8b0, #fef9db);
}
.Cuteen_DarkSky:before {
transition: 2s ease all;
opacity: 0;
background: linear-gradient(#4c3f6d, #6c62bb, #93b1ed);
}
.DarkMode .Cuteen_DarkSky:before {
opacity: 1;
}
.Cuteen_DarkPlanet {
z-index: 99999999;
position: fixed;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
-webkit-animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
transform-origin: center bottom;
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.Cuteen_DarkPlanet:after {
position: absolute;
left: 35%;
top: 40%;
width: 9.375rem;
height: 9.375rem;
border-radius: 50%;
content: '';
background: linear-gradient(#fefefe, #fffbe8);
}
.search span {
display: none;
}
.menus_item a {
text-decoration: none !important;
}
.icon-V {
padding: 5px;
}
@-moz-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-webkit-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@-o-keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
@keyframes CuteenPlanetMove {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
/* 白天夜晚切换动画end */


- -

新建js

[blogRoot]/self/js/新建`sun_moon.js,增加下面的代码

-
// 白天夜晚切换动画start
function switchNightMode() {
document.querySelector('body').insertAdjacentHTML('beforeend', '<div class="Cuteen_DarkSky"><div class="Cuteen_DarkPlanet"></div></div>'),
setTimeout(function() {
document.querySelector('body').classList.contains('DarkMode') ? (document.querySelector('body').classList.remove('DarkMode'), localStorage.setItem('isDark', '0'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')) : (document.querySelector('body').classList.add('DarkMode'), localStorage.setItem('isDark', '1'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')),
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].style.transition = 'opacity 3s';
document.getElementsByClassName('Cuteen_DarkSky')[0].style.opacity = '0';
setTimeout(function() {
document.getElementsByClassName('Cuteen_DarkSky')[0].remove();
}, 1e3);
}, 2e3)
})
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
document.querySelector('body').classList.add('DarkMode'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
}
// 白天夜晚切换动画end


- -

引用 sun_moon.pug

修改 [you_blog]\themes\butterfly\layout\includes\head.pug, 在文件末位增加以下代码:

-
  //- global config
!=partial('includes/head/config', {}, {cache: true})

include ./head/config_site.pug
include ./head/noscript.pug

!=fragment_cache('injectHeadJs', function(){return inject_head_js()})

!=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
+ include ./custom/sun_moon.pug

- -

替换昼夜切换按钮

修改[you_blog]\themes\butterfly\layout\includes\rightside.pug, 替换原本的昼夜切换按钮

-
  when 'translate'
if translate.enable
button#translateLink(type="button" title=_p('rightside.translate_title'))= translate.default
when 'darkmode'
if darkmode.enable && darkmode.button
- button#darkmode(type="button" title=_p('rightside.night_mode_title'))
- i.fas.fa-adjust
+ a.icon-V.hidden(onclick='switchNightMode()', title=_p('rightside.night_mode_title'))
+ svg(width='25', height='25', viewBox='0 0 1024 1024')
+ use#modeicon(xlink:href='#icon-moon')

- -

为博客添加波浪效果

修改index.pug文件

修改themes/butterfly/layout/includes/header/index.pug,在第 38 行左右

-
if top_img !== false
if is_post()
include ./post-info.pug
+ section.main-hero-waves-area.waves-area
+ svg.waves-svg(xmlns='http://www.w3.org/2000/svg', xlink='http://www.w3.org/1999/xlink', viewBox='0 24 150 28', preserveAspectRatio='none', shape-rendering='auto')
+ defs
+ path#gentle-wave(d='M -160 44 c 30 0 58 -18 88 -18 s 58 18 88 18 s 58 -18 88 -18 s 58 18 88 18 v 44 h -352 Z')
+ g.parallax
+ use(href='#gentle-wave', x='48', y='0')
+ use(href='#gentle-wave', x='48', y='3')
+ use(href='#gentle-wave', x='48', y='5')
+ use(href='#gentle-wave', x='48', y='7')
#post-top-cover
img#post-top-bg(class='nolazyload' src=bg_img)
else if is_home()
#site-info
h1#site-title=site_title
if theme.subtitle.enable

- -

添加css

[blogRoot]/self/css/meihua.css,增加下面的代码

-
/* 波浪css */
.main-hero-waves-area {
width: 100%;
position: absolute;
left: 0;
bottom: -11px;
z-index: 5;
}
.waves-area .waves-svg {
width: 100%;
height: 5rem;
}
/* Animation */

.parallax > use {
animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
}
.parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #f7f9febd;
}
.parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #f7f9fe82;
}
.parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #f7f9fe36;
}
.parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #f7f9fe;
}
/* 黑色模式背景 */
[data-theme="dark"] .parallax > use:nth-child(1) {
animation-delay: -2s;
animation-duration: 7s;
fill: #18171dc8;
}
[data-theme="dark"] .parallax > use:nth-child(2) {
animation-delay: -3s;
animation-duration: 10s;
fill: #18171d80;
}
[data-theme="dark"] .parallax > use:nth-child(3) {
animation-delay: -4s;
animation-duration: 13s;
fill: #18171d3e;
}
[data-theme="dark"] .parallax > use:nth-child(4) {
animation-delay: -5s;
animation-duration: 20s;
fill: #18171d;
}

@keyframes move-forever {
0% {
transform: translate3d(-90px, 0, 0);
}
100% {
transform: translate3d(85px, 0, 0);
}
}
/*Shrinking for mobile*/
@media (max-width: 768px) {
.waves-area .waves-svg {
height: 40px;
min-height: 40px;
}
}
- -

注意: 的是 css 中fill属性可以控制波浪颜色

-

页脚透明

[blogRoot]/self/css/meihua.css,增加下面的代码

-
/* 页脚透明start */
#footer {
background: var(--icat-footer-background);
}

#footer #footer-wrap {
color: var(--font-color)
}

#footer #footer-wrap a {
color: var(--font-color)
}

/* 页脚透明end */
- -

文章页版权样式美化

[blogRoot]/self/css/meihua.css,增加下面的代码

-
/* 版权样式调整start */
#post .post-copyright {
background: var(--icat-card-bg);
padding: 1rem 1.3rem;
overflow: hidden;
border: var(--style-border);
border-width: 1px;
transition: 0.3s;
position: relative;
margin: 1.5rem 0px 0.5rem;
border-radius: 8px;
}
#post .post-copyright:before {
position: absolute;
right: 22px;
top: -77px;
content: "\e039";
font-size: 180px;
font-family: "iconfont";
color: var(--icat-fontcolor);
opacity: 0.1;
filter: blur(7px);
}
/* 版权样式调整end */
+
+ +
-

分类页和标签页面添加Bar条

-

使用justlovesmile

+
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
+ +
]]> + + 工具教程 + + + docker + + + + 使用docker安装常用软件:mysql + /posts/58312.html + 使用docker安装常用软件:mysql

以mysql 5.7为例

使用docker pull mysql:5.7拉取mysql 5.7镜像

+

使用镜像创建容器

简单版

使用docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7运行镜像创建容器

+
+

因为linux系统自己装了mysql,避免端口冲突,先运行ps -ef|grep mysql查询

-

新增pug文件

新增categoryBar.pug文件

首先是分类条,在themes/butterfly/layout/includes/处新建文件categoryBar.pug

-
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("category")
a.category-bar-more(href="/categories/") 更多
- -

新增tarsBar.pug文件

其次是标签条,在themes/butterfly/layout/includes/处新建文件tagBar.pug,因为样式一样,所以没有更改id和class名称。

-
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("tag")
a.category-bar-more(href="/tags/") 更多
+

使用docker ps查询容器编号

+

使用docker exec -it 容器编号 bash进入mysql容器

+

使用mysql -uroot -p,输入密码,登录mysql

+
验证

show databases

+
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
-

新建Hexo辅助函数

theme/butterfly/scripts/helpers/中创建get_arrays.js

-
hexo.extend.helper.register('getarray_bar', function (types) {
if (!types) {
types = "category"
}
const categoriesBar = function (categories) {
if (!categories || !categories.length) return ``
const categoryArr = []
hexo.locals.get('categories').map(function (category) {
categoryArr.push({ name: category.name, value: category.length })
})
categoryArr.sort((a, b) => { return b.value - a.value })
let strCategoriesBar = ``
for (let i = 0; i < categories.length; i++) {
strTemp=`
<div class="category-bar-item" id="${categoryArr[i].name}">
<a href="/categories/${categoryArr[i].name}/">${categoryArr[i].name}</a>
</div>`
strCategoriesBar+=strTemp
}
return strCategoriesBar
}
const tagsBar = function(tags) {
if (!tags || !tags.length) return ``
const tagArr = []
hexo.locals.get('tags').map(function (tag) {
tagArr.push({ name: tag.name, value: tag.length })
})
tagArr.sort((a, b) => { return b.value - a.value })
let strTagsBar = ``
for (let i = 0; i < tags.length; i++) {
strTemp=`
<div class="category-bar-item" id="${tagArr[i].name}">
<a href="/tags/${tagArr[i].name}/">${tagArr[i].name}</a>
</div>`
strTagsBar+=strTemp
}
return strTagsBar
}
if (types == "category"){
return categoriesBar(this.site.categories)
}
if (types == "tag"){
return tagsBar(this.site.tags)
}
})
+
中文乱码问题
INSERT INTo t1 VALUES(3, "张三");
---
INSERT INTo t1 VALUES(3, "张三")
> 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
> 时间: 0.038s
-

在页面引用模块

在分类页面引用:找到theme/butterfly/layout/category.pug

-
extends includes/layout.pug

block content
if theme.category_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts.category_ui
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#category
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-folder-open
+ include includes/categoryBar.pug
.article-sort-title= _p('page.category') + ' - ' + page.category
+articleSort(page.posts)
include includes/pagination.pug
+

因为docker默认编码字符集隐患

+
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>
-

在标签页引用:找到theme/butterfly/layout/tag.pug

-
extends includes/layout.pug

block content
if theme.tag_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#tag
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-tags
+ include includes/tagBar.pug
.article-sort-title= _p('page.tag') + ' - ' + page.tag
+articleSort(page.posts)
include includes/pagination.pug
+

解决中文乱码问题

在宿主机的/ggls/mysql/conf目录下vim my.cnf文件,通过容器卷同步给容器实例

+
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
-

引入js和css文件

在自定义的js里面添加

-
// -----------分类条的js-----------
categoriesBarActive()
topCategoriesBarScroll()
tagsBarActive()

//分类条
function categoriesBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#category-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/categories\/.*?\//;
var patbool = pattern.test(urlinfo);
console.log(patbool);
// 获取当前的分类
if (patbool) {
var valuegroup = urlinfo.split("/");
console.log(valuegroup[2]);
// 获取当前分类
var nowCategorie = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowCategorie).classList.add("select");
}
}
}

}

//鼠标控制横向滚动
function topCategoriesBarScroll(){
if (document.getElementById("category-bar-items")){
let xscroll = document.getElementById("category-bar-items");
xscroll.addEventListener("mousewheel", function (e) {
//计算鼠标滚轮滚动的距离
let v = -e.wheelDelta / 2;
xscroll.scrollLeft += v;
//阻止浏览器默认方法
e.preventDefault();
}, false);
}
}

// -----------标签条的js-----------
//标签条
function tagsBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
//console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#tags-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/tags\/.*?\//;
var patbool = pattern.test(urlinfo);
//console.log(patbool);
// 获取当前的标签
if (patbool) {
var valuegroup = urlinfo.split("/");
//console.log(valuegroup[2]);
// 获取当前分类
var nowTag = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowTag).classList.add("select");
}
}
}
}
+

改完后重启mysql实例

+
服务器输入SHOW VARIABLES LIKE 'character%';验证

docker安装好并run出容器后,先修改字符集编码在创建mysql库

+
删库备份问题

只要本机上面的容器卷存在,容器卷位置没有改变的情况下,就算容器被删除,重新打开后,创建的数据库,表都还存在

+

工作使用版启动容器方法

+
docker run -d -p 3306:3306 --privileged=true
-v /ggls/mysql/log:/var/log/mysql
-v /ggls/mysql/data:/var/lib/mysql
-v /ggls/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7
-

修改导航栏一闪的问题

-

使用的安知鱼

-
-

修改main.js

修改顶栏一闪而过的 bug 修改本地themes/butterfly/source/js/main.js

-
  window.scrollCollect = () => {
return btf.throttle(function (e) {
const currentTop = window.scrollY || document.documentElement.scrollTop
const isDown = scrollDirection(currentTop)
if (currentTop > 56) {
+ $header.classList.add('is-top-bar')
if (isDown) {
if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible')
if (isChatBtnShow && isChatShow === true) {
chatBtnHide()
isChatShow = false
}
} else {
if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible')
if (isChatBtnHide && isChatShow === false) {
chatBtnShow()
isChatShow = true
}
}
$header.classList.add('nav-fixed')
if (window.getComputedStyle($rightside).getPropertyValue('opacity') === '0') {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
} else {
if (currentTop === 0) {
- $header.classList.remove('nav-fixed', 'nav-visible')
+ $header.classList.remove('is-top-bar')
}
$rightside.style.cssText = "opacity: ''; transform: ''"
}

if (document.body.scrollHeight <= innerHeight) {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
}, 200)()
}
-

侧边栏最近文章梅花

修改index.pug布局

去除首页最近文章显示,改为文章页显示,修改themes/butterfly/layout/includes/widget/index.pug

-
else
//- page
!=partial('includes/widget/card_author', {}, {cache: true})
!=partial('includes/widget/card_announcement', {}, {cache: true})
!=partial('includes/widget/card_top_self', {}, {cache: true})

.sticky_layout
if showToc
include ./card_post_toc.pug

//- !=partial('includes/widget/card_recent_post', {}, {cache: true}) //- 注释掉最近文章

!=partial('includes/widget/card_ad', {}, {cache: true})
!=partial('includes/widget/card_newest_comment', {}, {cache: true})
!=partial('includes/widget/card_categories', {}, {cache: true})
!=partial('includes/widget/card_tags', {}, {cache: true})
-

添加css美化

#aside-content .aside-list > .aside-list-item .content > time {
display: none;
}
#aside-content .aside-list > .aside-list-item .content > .title {
-webkit-line-clamp: 3;
font-weight: 700;
padding: 2px 0;
}
#aside-content .aside-list > .aside-list-item {
padding: 8px;
padding-top: 6px !important;
padding-bottom: 6px !important;
border-radius: 12px;
transition: 0.3s;
margin: 4px 0;
cursor: pointer;
}
@media screen and (min-width: 1300px) {
#aside-content .aside-list > .aside-list-item:hover {
transform: scale(1.03);
}
#aside-content .aside-list > .aside-list-item:active {
transform: scale(0.97);
}
}
#aside-content .aside-list > .aside-list-item:hover .thumbnail > img {
transform: scale(1);
}
#aside-content .aside-list > .aside-list-item:not(:last-child) {
border-bottom: 0 dashed var(--anzhiyu-background) !important;
}
#aside-content .aside-list > .aside-list-item .thumbnail {
border-radius: 8px;
border: var(--style-border);
}
#aside-content .aside-list > .aside-list-item:hover {
background: var(--anzhiyu-blue-main);
color: var(--anzhiyu-white);
transition: 0.3s;
box-shadow: var(--anzhiyu-shadow-main);
}
#aside-content .aside-list > .aside-list-item:hover a {
color: var(--anzhiyu-white) !important;
}
.card-widget.card-recent-post {
padding: 0.4rem 0.6rem !important;
}
-

文章页H1-H6添加小风车

-

使用的安知鱼

+]]> + + 工具教程 + + + docker + + + + 使用docker安装常用软件:redis + /posts/32161.html + 使用docker安装常用软件:redis

使用docker pull redis:6.0.8 拉取redis:6.0.8镜像

+

创建容器

+
+

容器卷要加入--privileged=true

-

修改主题配置文件

beautify:
enable: true
field: post # site/post
# title-prefix-icon: '\f0c1' 原内容
title-prefix-icon: '\f863'
title-prefix-icon-color: "#F47466"
+

在宿主机下新建目录mkdir -p /app/redis

+]]>
+ + 工具教程 + + + docker + +
+ + 使用docker安装常用软件:tomcat + /posts/50699.html + 使用docker安装常用软件:tomcat

安装流程

首先把tomcat在镜像源中pull下来,使用docker images 查看镜像

+

使用docker run -d -p 8080:8080 tomcat:9.0 新建容器运行tomcat

+
+

运行后使用本地PC使用阿里云的ip和端口访问docker上面的tomcat

+
+
+ +
-

让小风车转起来

在自定义 [blog]/source/self/css/custom.css 文件中,加入以下代码即可

-
/* 文章页H1-H6图标样式效果 */
h1::before,
h2::before,
h3::before,
h4::before,
h5::before,
h6::before {
-webkit-animation: ccc 1.6s linear infinite;
animation: ccc 1.6s linear infinite;
}
@-webkit-keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
@keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
-

小风车的颜色和大小

修改小风车的颜色和大小,加入下面的代码

-
#content-inner.layout h1::before {
color: #ef50a8;
margin-left: -1.55rem;
font-size: 1.3rem;
margin-top: -0.23rem;
}
#content-inner.layout h2::before {
color: #fb7061;
margin-left: -1.35rem;
font-size: 1.1rem;
margin-top: -0.12rem;
}
#content-inner.layout h3::before {
color: #ffbf00;
margin-left: -1.22rem;
font-size: 0.95rem;
margin-top: -0.09rem;
}
#content-inner.layout h4::before {
color: #a9e000;
margin-left: -1.05rem;
font-size: 0.8rem;
margin-top: -0.09rem;
}
#content-inner.layout h5::before {
color: #57c850;
margin-left: -0.9rem;
font-size: 0.7rem;
margin-top: 0rem;
}
#content-inner.layout h6::before {
color: #5ec1e0;
margin-left: -0.9rem;
font-size: 0.66rem;
margin-top: 0rem;
}
-

小风车hover效果

设置鼠标碰到标题时,小风车跟随标题变色,且像是被光标阻碍了,转速变慢。鼠标离开恢复转速。也可以设置为 none 鼠标碰到停止转动。

-
#content-inner.layout h1:hover,
#content-inner.layout h2:hover,
#content-inner.layout h3:hover,
#content-inner.layout h4:hover,
#content-inner.layout h5:hover,
#content-inner.layout h6:hover {
color: #3b70fc;
}
#content-inner.layout h1:hover::before,
#content-inner.layout h2:hover::before,
#content-inner.layout h3:hover::before,
#content-inner.layout h4:hover::before,
#content-inner.layout h5:hover::before,
#content-inner.layout h6:hover::before {
color: #3b70fc;
-webkit-animation: ccc 3.2s linear infinite;
animation: ccc 3.2s linear infinite;
}
+

这是什么原因呢

使用docker ps查询到容器编号,docker exec -it 容器编号 bash 打开容器

+
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c52ab6b8b8df b8e65a4d736d "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp inspiring_bohr
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker exec -it c52ab6b8b8df bash
root@c52ab6b8b8df:/usr/local/tomcat#
-

右下角设置 icon 转的太快了,让它慢一点吧。继续添加:

-
/* 页面设置icon转动速度调整 */
#rightside_config i.fas.fa-cog.fa-spin {
animation: fa-spin 5s linear infinite;
}
+

使用ls-l查看文件列表

+
root@c52ab6b8b8df:/usr/local/tomcat# ls -l
total 156
-rw-r--r-- 1 root root 18970 Dec 2 14:30 BUILDING.txt
-rw-r--r-- 1 root root 6210 Dec 2 14:30 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Dec 2 14:30 LICENSE
-rw-r--r-- 1 root root 2333 Dec 2 14:30 NOTICE
-rw-r--r-- 1 root root 3378 Dec 2 14:30 README.md
-rw-r--r-- 1 root root 6898 Dec 2 14:30 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Dec 2 14:30 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 22 17:16 bin
drwxr-xr-x 1 root root 4096 Apr 29 01:48 conf
drwxr-xr-x 2 root root 4096 Dec 22 17:16 lib
drwxrwxrwx 1 root root 4096 Apr 29 01:48 logs
drwxr-xr-x 2 root root 4096 Dec 22 17:16 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 22 17:16 temp
drwxr-xr-x 2 root root 4096 Dec 22 17:16 webapps
drwxr-xr-x 7 root root 4096 Dec 2 14:30 webapps.dist
drwxrwxrwx 2 root root 4096 Dec 2 14:30 work
root@c52ab6b8b8df:/usr/local/tomcat#
-

文章加密

安装插件

通过插件,实现文章输入密码才能浏览

-
npm install hexo-blog-encrypt --save
+

从列表可以看到有两个文件夹webappswebapps.dist,数据全部在webapps.dist里面,需要将webapps删除,把webapps.dist重命名成webapps即可访问

+

使用rm -rf webapps删除webapps文件夹

+

使用mv webapps.dist webapps 重命名

+

再次使用本地访问

+
+ +
-

修改文章

在文章头部加入

-
---
title: 加密文章测试,输入test即可查看
password: test
message: 测试加密,这里的密码是:test
---
-

文章增加最新文章标识

-

转载于云端

+

使用免修改版的tomcat

+

docker pull billygoo/tomcat8-jdk8

+

docker run -d -p 8080:8080 –name tomcat8 billygoo/tomcat8-jdk8

-

修改page.js

在js文件里面添加一段js

-
// 最新文章
hexo.extend.helper.register('newPost', function() {
let name, time;
hexo.locals.get('posts').map((item, index) => {
if (index == 0) name = item.title, time = item.date
else if (item.date > time) { name = item.title, time = item.date }
});
return name
})
- -

修改post-ui.pug

themes\butterfly\layout\includes\mixins\post-ui.pug 添加代码

-
mixin postUI(posts)
+ - let newTitle= newPost()
each article , index in page.posts.data
.recent-post-item
-
let link = article.link || article.path
let title = article.title || _p('no_title')
const position = theme.cover.position
let leftOrRight = position === 'both'
? index%2 == 0 ? 'left' : 'right'
: position === 'left' ? 'left' : 'right'
let post_cover = article.cover
let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : ''
-
if post_cover && theme.cover.index_enable
.post_cover(class=leftOrRight)
a(href=url_for(link) title=title)
img.post_bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
+ if newTitle == title
+ span(class=`newPost-${leftOrRight=='left'?'right':'left'}`) 最新
- -

添加自定义CSS

#recent-posts>.recent-post-item {
position: relative;
}

/* 最新文章图标 */
.newPost-left,
.newPost-right {
position: absolute;
top: 0;
color: white;
padding: 0 15px;
background-color: #49b1f5;
border-radius: 0 0 10px 10px;
}

.newPost-left {
left: 15px;
}

.newPost-right {
right: 15px;
}
+]]> + + 工具教程 + + + docker + + + + 容器数据卷 + /posts/1351.html + 容器数据卷

运行带有容器数据卷的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
-

hexo加速

-

使用[akilar](使用gulp压缩博客静态资源 | Akilarの糖果屋)教程

+

举个栗子

+

宿主vs容器之间映射添加容器卷

-

安装Gulp插件

在博客根目录[Blogroot]打开终端,输入:

-
npm install --global gulp-cli #全局安装gulp指令集
npm install gulp --save #安装gulp插件
- -

安装各个下属插件以实现对各类静态资源的压缩

    -
  • 压缩HTML:
  • -
-
npm install gulp-htmlclean --save-dev
npm install gulp-html-minifier-terser --save-dev
# 用gulp-html-minifier-terser可以压缩HTML中的ES6语法
-
    -
  • 压缩CSS:
  • +
  • 使用docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 添加
-
npm install gulp-clean-css --save-dev
+
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ui ubuntu
    -
  • 压缩JS:
  • +
  • 查看数据卷是否挂载成功
-
npm install gulp-terser --save-dev
+
`在容器内部创建一个dockerin.txt文件
root@48955acecd79:/tmp/docker_data# touch dockerin.txt
root@48955acecd79:/tmp/docker_data# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 28 09:21 ./
drwxrwxrwt 1 root root 4096 Apr 28 09:18 ../
-rw-r--r-- 1 root root 0 Apr 28 09:21 dockerin.txt
`在宿主机目录下查看该文件
root@48955acecd79:/tmp/docker_data# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /tmp/host_data/
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 28 17:21 dockerin.txt
`在宿主机创建一个文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# touch host.txt

`在容器查看文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# docker exec -it 48955acecd79 bash
root@48955acecd79:/# cd /tmp/docker_data/

+ 容器和宿主机之间数据共享

[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell

+ 主机修改,docker同步获得

+ docker容器stop,主机修改,docker容器重启数据同步

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d

+ 默认是可读可写的

```shell
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
+ +
    -
  • 压缩字体包:
  • +
  • 修改成容器只读
-
npm install gulp-fontmin --save-dev
- -

为Gulp创建gulpfile.js任务脚本

在博客根目录[Blogroot]下新建gulpfile.js,打开[Blogroot]\gulpfile.js,输入以下内容:

-
//用到的各个插件
var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var fontmin = require('gulp-fontmin');
// gulp-tester
var terser = require('gulp-terser');
// 压缩js
gulp.task('compress', async() =>{
gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(terser())
.pipe(gulp.dest('./public'))
});
//压缩css
gulp.task('minify-css', () => {
return gulp.src(['./public/**/*.css'])
.pipe(cleanCSS({
compatibility: 'ie11'
}))
.pipe(gulp.dest('./public'));
});
//压缩html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true, //清除html注释
collapseWhitespace: true, //压缩html
collapseBooleanAttributes: true,
//省略布尔属性的值,例如:<input checked="true"/> ==> <input />
removeEmptyAttributes: true,
//删除所有空格作属性值,例如:<input id="" /> ==> <input />
removeScriptTypeAttributes: true,
//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,
//删除<style>和<link>的 type="text/css"
minifyJS: true, //压缩页面 JS
minifyCSS: true, //压缩页面 CSS
minifyURLs: true //压缩页面URL
}))
.pipe(gulp.dest('./public'))
});
//压缩字体
function minifyFont(text, cb) {
gulp
.src('./public/fonts/*.ttf') //原字体所在目录
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest('./public/fontsdest/')) //压缩后的输出目录
.on('end', cb);
}

gulp.task('mini-font', (cb) => {
var buffers = [];
gulp
.src(['./public/**/*.html']) //HTML文件所在目录请根据自身情况修改
.on('data', function(file) {
buffers.push(file.contents);
})
.on('end', function() {
var text = Buffer.concat(buffers).toString('utf-8');
minifyFont(text, cb);
});
});
// 运行gulp命令时依次执行以下任务
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html','mini-font'
#))
+
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
-

在每次运行完hexo generate生成静态页面后,运行gulp对其进行压缩。指令流程如下:

+

卷的继承和共享

-
hexo clean
hexo generate
gulp
hexo server 或 hexo deploy
+
    +
  • 容器1完成和宿主机的映射
      +
    • 容器2继承容器1,则容器2操作后同步到容器1和宿主机
    • +
    • 宿主机操作同步到容器1,容器2
    • +
    • 容器1操作同步到宿主机,容器2
    • +
    +
  • +
+
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
-

手机端悬浮窗

-

使用akilar教程

-
-

新建[Blogroot]\themes\butterfly\source\js\custom\fixed_card_widget.js,用来控制显隐逻辑

-
// 固定卡片点击动作
function FixedCardWidget(type,name,index){
// 根据id或class选择元素
if (type === "id"){
var tempcard = document.getElementById(name);
}
else{
var tempcard = document.getElementsByClassName(name)[index];
}
// 若元素存在
if (tempcard) {
// 首先判断是否存在fixed-card-widget类
if (tempcard.className.indexOf('fixed-card-widget') > -1){
// 存在则移除
RemoveFixedCardWidget();
}
else{
// 不存在则先初始化防止卡片叠加
RemoveFixedCardWidget();
//新建退出蒙版
CreateQuitBox();
// 再添加固定卡片样式
tempcard.classList.add('fixed-card-widget');
}
}
}
//创建一个蒙版,作为退出键使用
function CreateQuitBox(){
var quitBox = `<div id="quit-box" onclick="RemoveFixedCardWidget()"></div>`
var asideContent = document.getElementById('aside-content');
asideContent.insertAdjacentHTML("beforebegin",quitBox)
}
// 移除卡片方法
function RemoveFixedCardWidget(){
var activedItems = document.querySelectorAll('.fixed-card-widget');
if (activedItems) {
for (i = 0; i < activedItems.length; i++) {
activedItems[i].classList.remove('fixed-card-widget');
}
}
//移除退出蒙版
var quitBox = document.getElementById('quit-box');
if (quitBox) quitBox.remove();
}
// 常规先初始化,确保切换页面后不会有固定卡片留存
RemoveFixedCardWidget()

- -

新建[Blogroot]\themes\butterfly\source\css\_layout\fixed_card_widget.styl,此处使用stylus交给插件编译,能够更快捷的适配多种内核样式

-
// 垂直居中卡片样式(排除toc目录卡片)
.fixed-card-widget
&:not(#card-toc)
visibility visible!important
display block!important
position fixed!important
bottom 0
left 0
top 0
right 0
margin auto
margin-bottom auto!important
margin-top auto!important
max-width 300px
max-height 500px
width auto
height auto
overflow-y: scroll
z-index 999
animation rotateX 0.5s ease
animation-fill-mode forwards
&::-webkit-scrollbar
width: 0
// 针对说说卡片做样式兼容适配
.card-shuo
&.fixed-card-widget
#artitalk_main
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
#operare_artitalk
.c2
z-index 1000
// 针对标签卡片做样式兼容适配
.card-tags
&.fixed-card-widget
.card-tag-cloud
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
// 控制手机端可见
@media screen and (max-width: 768px)
div#fixedcard-dashboard
display flex!important
// 侧栏悬浮按钮样式
div#fixedcard-dashboard
position fixed
top 150px
width fit-content
height 40px
opacity 0.3
transition all 0.5s
display none
background rgba(255,255,255,0.9)
padding 5px 10px
border-top-right-radius 20px
border-bottom-right-radius 20px
z-index 1000
&:hover
opacity 1
button
&.fixedcard-activebtn
width 30px
opacity 1
pointer-events all
// 按钮样式
button
&.fixedcard-activebtn
width 0px
height 30px
transition all .5s
display flex
opacity 0
align-items center
justify-content space-around
pointer-events none
color #757273
// 悬浮按钮头像
.fixedcard-user-avatar
display inline-block
img
&.fixedcard-user-avatar-img
width 30px
height 30px
border-radius 50%
// 悬浮按钮夜间模式适配
[data-theme="dark"]
div#fixedcard-dashboard
background rgba(55,55,55,0.9)
button
&.fixedcard-activebtn
color #bcbdbd

// 卡片开启动画效果
@keyframes rotateX
from
transform rotateX(90deg)
to
transform rotateX(0deg)
// 退出蒙版效果
div#quit-box
position fixed
display block
left 0
top 0
width 100vh
height 100vh
z-index 99
background rgba(25,25,25,0.3)


[data-theme="dark"]
div#quit-box
background rgba(147, 146, 128, 0.3)

- -

新建[Blogroot]\themes\butterfly\layout\includes\custom\fixed_card_widget.pug,以后的源码魔改教程都会尽量将改动文件归纳到带custom字样的文件夹里,便于管理魔改文件。

-
#fixedcard-dashboard
if is_post()
each poitem in theme.fixed_card_widget.post
button.fixedcard-activebtn(type="button" title=poitem.title onclick=`FixedCardWidget("` + poitem.type + `","` + poitem.name + `","` + poitem.index + `")`)
i(class=poitem.icon)
else
each paitem in theme.fixed_card_widget.page
button.fixedcard-activebtn(type="button" title=paitem.title onclick=`FixedCardWidget("` + paitem.type + `","` + paitem.name + `","` + paitem.index + `")`)
i(class=paitem.icon)
.fixedcard-user-avatar.fixedcard-activebtn(onclick="RemoveFixedCardWidget()")
img.fixedcard-user-avatar-img(src=url_for(theme.avatar.img) title=config.author)

- -

修改[Blogroot]\themes\butterfly\layout\includes\additional-js.pug,直接加在文件末尾即可,但是注意缩进!

-
  if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async data-pjax src=url_for(theme.CDN.busuanzi))
+ if !theme.aside.mobile && theme.fixed_card_widget.enable
+ include ./custom/fixed_card_widget.pug
- -

因为还做了page和post页面不同悬浮按钮的配置,为了让它能够自动切换而不是惰性加载,需要修改[Blogroot]\themes\butterfly\layout\includes\third-party\pjax.pug大约第十四行的位置,在pjax选择器中加入悬浮按钮的id。

-
  script.
let pjaxSelectors = [
'title',
'#config-diff',
'#body-wrap',
'#rightside-config-hide',
'#rightside-config-show',
+ "#fixedcard-dashboard",
'.js-pjax'
]
- -

修改[Blogroot]\_config.butterfly.yml,新增配置项,此处的选择器其实就是提取了document.getElementsByClassName("name")[index]document.getElementById("name")这两个方法中的参数来确保能够找到侧栏卡片。原本其实是可以做成自动根据侧栏生成的,但是考虑到还有插件挂载和自定义卡片,以及还有部分用户会刻意隐藏一些侧栏卡片,所以干脆还是让用户自己去配置想要加到菜单的卡片好了。
找id或者class的办法很简单,用F12开启控制台,用左上角的元素选择器点选想要的侧栏卡片,在源码栏找到对应的class或者id。因为class是可以重名的,所以还存在一个序列问题,从0开始计数。此处为了避免语意混乱,建议还是用特征明显的class或者id来选择对应卡片。

-
#侧栏悬浮卡片控制按钮
#https://akilar.top/posts/451ac5f8/
fixed_card_widget:
enable: true
page: #页面显示按钮
- type: class #侧栏卡片选择器类型
name: card-info #侧栏卡片选择器名称
index: 0 #侧栏卡片选择器序列
icon: fas fa-address-book #图标
title: 用户信息 #悬停显示提示
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-shuo
index: 0
icon: fas fa-comments
title: 碎碎念
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
- type: id
name: card-newest-comments
index: 0
icon: fas fa-comment-dots
title: 最新评论
- type: class
name: card-tags
index: 0
icon: fas fa-tags
title: 标签
- type: class
name: card-webinfo
index: 0
icon: fas fa-chart-line
title: 网站咨询
post: #文章页显示按钮
- type: class
name: card-info
index: 0
icon: fas fa-address-book
title: 用户信息
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
- -

修改[Blogroot]_config.butterfly.yml的inject配置项

-
 inject:
head:

bottom:
+ - <script data-pjax defer src="/js/custom/fixed_card_widget.js"></script>
- -

注意要关闭手机端显示侧栏卡片才能启用fixed卡片样式。

-
  aside:
enable: true
hide: false
button: true
- mobile: true # display on mobile
+ mobile: false # display on mobile
position: right # left or right
- -

设置弹窗

-

这个功能使用的注:这个魔改使用了Ariasakaの小窝Leonus的教程

-
-

新建setting.pug文件

-

[blogRoot]/themes\acryple\layout\includes\setting.pug

-
html
body
#settingWindow.js-pjax
span.setting-title
span#stt 控制面板
a(id="close-console" onclick="toggleWinbox();") ×
button#backer(onclick='$(\'.asetting\').hide();$(\'.settingx\').show();$(\'#backer\').hide()')
i.fa.fa-chevron-left
span 返回
.settings
#setting-buttons
button.settingx(onclick='$(\'#theme-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fas.fa-layer-group
span 外观
button.settingx(onclick='$(\'#font-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-font
span 字体
button.settingx(onclick='$(\'#background-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.far.fa-image
span 背景
button.settingx(onclick='$(\'#con-echarts\').show();$(\'.settingx\').hide();$(\'#backer\').show();var evt = document.createEvent("HTMLEvents");evt.initEvent("resize", false, false);window.dispatchEvent(evt);')
i.fas.fa-chart-pie
span 统计
button.settingx(onclick='$(\'#con-abouts\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-cloud-download
span 关于
#setting-hides
#theme-settings.asetting
h2.content-head 性能设置
p
.content(style='display:flex')
input#blur(type='checkbox', onclick='setBlur()')
.content-text 禁用模糊效果
//- .content(style='display:flex')
//- input#yjjs(type='checkbox', onclick='yjjs1()')
//- .content-text 硬件加速
.content(style='display:flex')
input#fpson(type='checkbox', onclick='fpssw()' style="flex-shrink: 0")
.content-text
span 开启帧率检测(
a(href='javascript:window.location.reload()') 刷新
span 后生效)
p
h2.content-head 主题设置
//- .content(style='display:flex')
//- input#hideAside(type='checkbox', onclick='toggleRightside()')
//- .content-text 隐藏侧边栏
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleAplayer()')
.content-text 显示aplayer
.content(style='display:flex')
input#hideSakura(type='checkbox', onclick='toggleSakuras()')
.content-text 落樱特效
.content(style='display:flex')
input#autoTheme(type='checkbox', onclick='toggleAutoTheme()')
.content-text 明暗模式自动切换
.content(style='display:flex')
input#autoColor(type='checkbox', onclick='autoColor()')
.content-text 自动主题色(跟随文章封面)
| 未完工
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleNav()')
.content-text 固定导航栏
| ###
.content(style='display:flex')
button.content-button(onclick='switchTheme()') 切换主题

p
h3.content-head 主题色
#themeColorSettings.content(style='display:flex')
input#red(type='radio', name='colors', onclick='setColor(\'red\')')
input#orange(type='radio', name='colors', onclick='setColor(\'orange\')')
input#yellow(type='radio', name='colors', onclick='setColor(\'yellow\')')
input#green(type='radio', name='colors', onclick='setColor(\'green\')')
input#blue(type='radio', name='colors', onclick='setColor(\'blue\')')
input#heoblue(type='radio', name='colors', onclick='setColor(\'heoblue\')')
input#darkblue(type='radio', name='colors', onclick='setColor(\'darkblue\')')
input#purple(type='radio', name='colors', onclick='setColor(\'purple\')')
input#pink(type='radio', name='colors', onclick='setColor(\'pink\')', checked)
input#black(type='radio', name='colors', onclick='setColor(\'black\')')
input#blackgray(type='radio', name='colors', onclick='setColor(\'blackgray\')')
#font-settings.asetting
h2.content-head 字体设置
p#swfs
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYTMR\'!important;color:black', onclick='setFont(\'HYTMR\')') 汉仪唐美人
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYPailou\'!important;color:black', onclick='setFont(\'HYPailou\')') 汉仪新蒂牌楼
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXJLJ\'!important;color:black', onclick='setFont(\'FZXJLJ\')') 方正金陵体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXS\'!important;color:black', onclick='setFont(\'FZXS\')') 方正像素体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'ZhuZiAWan\'!important;color:black', onclick='setFont(\'ZhuZiAWan\')') 筑紫A丸ゴシック
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZODZK\'!important;color:black', onclick='setFont(\'FZODZK\')') 方正欧蝶正楷
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Serif\'!important;color:black', onclick='setFont(\'Source Serif\')') 思源宋体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Sans\'!important;color:black', onclick='setFont(\'Source Sans\')') 思源黑体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:-apple-system, IBM Plex Mono ,monosapce,\'微软雅黑\', sans-serif;', onclick='setFont(\'main\')') 系统默认
br
#background-settings.asetting
h2(style='margin-left:10px') 背景设置
div
span 注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效
button.content-button(onclick='localStorage.removeItem(\'blogbg\');location.reload();')
i.fa-solid.fa-arrows-rotate
span 点我恢复默认背景
button.content-button(onclick='switchTheme()') 切换主题
h3 图片(手机)
.bgbox
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)\')')
h3 图片(电脑)
.bgbox
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)\')')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aea549be6.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aea549be6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aec701a68.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aec701a68.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aef4a5543.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aef4a5543.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324af3622884.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324af3622884.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/12/08/6391b77ed767c.png)\')')
img(src='https://bu.dusays.com/2022/12/08/6391b77ed767c.png')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp')
h3 渐变色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #B7D31E, #42CE1E)', onclick='changeBg(\'linear-gradient(to right, #B7D31E, #42CE1E)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #06DE86, #06A5DE)', onclick='changeBg(\'linear-gradient(to right, #06DE86, #06A5DE)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #189BC4, #183DC4)', onclick='changeBg(\'linear-gradient(to right, #189BC4, #183DC4)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #C018C4, #C41818)', onclick='changeBg(\'linear-gradient(to right, #C018C4, #C41818)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #8B00BB, #030094)', onclick='changeBg(\'linear-gradient(to right, #8B00BB, #030094)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)', onclick='changeBg(\'linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)', onclick='changeBg(\'linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)\')')
h3 纯色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #7D9D9C', onclick='changeBg(\'#7D9D9C\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #fff', onclick='changeBg(\'#fff\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #49A6E9', onclick='changeBg(\'#49A6E9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #F7CEFF', onclick='changeBg(\'#F7CEFF\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #FFFFCE', onclick='changeBg(\'#FFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #CFFFCE', onclick='changeBg(\'#CFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #17EFE9', onclick='changeBg(\'#17EFE9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #9F17EF', onclick='changeBg(\'#9F17EF\')')
#con-echarts.asetting
h1 文章统计
h2 监控
iframe(src="https://status.yisous.xyz" width="100%" height="500px" frameborder="no")
if !is_page()
h2 文章统计
script(src="https://npm.elemecdn.com/echarts@4.9.0/dist/echarts.min.js")
div(id="posts-chart" data-start="2021-01" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="tags-chart" data-length="10" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="categories-chart" data-parent="true" style="border-radius: 8px; height: 300px; padding: 10px;")
h2 访问统计
| 显示不出来请刷新页面
//-下面换成自己的51la统计

#con-abouts.asetting
h1 关于
| Hexo-theme-Acryple v1.0.100
br
| Ariasaka Console v0.01
br
| 欢迎
a(href="/messageboard")
| 反馈!
#setting-sidesl
button(title="恢复默认设置" class="reSettings con-rightside")
i.fa.fa-repeat
#setting-sides
button(title="繁简转换" class="con-rightside" id="con-translate" onclick="javascript:rmf.translate();")
i.iconfont.icon-fanti
button(title="昼夜切换" class="con-rightside" id="con-mode" onclick="switchDarkMode();")
i.fa.fa-adjust
if is_post()||is_page()
button(title="阅读模式" class="con-rightside" id="con-reading" onclick="rmf.switchReadMode();")
i.fa.fa-book-open
if !is_page()
button(title="单双栏切换" class="con-rightside" id="con-toggleaside" onclick="toggleAside();")
i.fas.fa-arrows-alt-h
if !is_page()
button(title="左右栏切换" class="con-rightside" id="con-toggleleftaside" onclick="switchAside();")
i.fas.fa-binoculars
if is_post()||is_page()
button(title="开关弹幕" class="con-rightside" id="con-barrage" onclick="switchCommentBarrage();")
i.iconfont.icon-danmu
button(title="全屏" class="con-rightside" id="con-fullscreen" onclick="fullScreen();")
i.fas.fa-expand

- -

js部分

-
document.addEventListener('pjax:complete', tosetting);
document.addEventListener('DOMContentLoaded', tosetting);
function tosetting(){
$("#settingWindow").hide();
if(localStorage.getItem("blur")=="false"){
blur=0;
}else{
blur=1;

}
if(localStorage.getItem("yjjs")=="true"){
yjjs=1;
}else{
yjjs=0;

}
if(localStorage.getItem("fpson")==undefined){
localStorage.setItem("fpson","1");
}
if(!blur){
document.getElementById("settingStyle").innerText=`
*,*:not(.card-info)::before,*::after{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
setBlur=function(){
blur=!blur;
localStorage.setItem("blur",blur);
if(!blur){
document.getElementById("settingStyle").innerText=`
*{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
}
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
yjjs1=function(){
yjjs=!yjjs;
localStorage.setItem("yjjs",yjjs)
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
}
if(localStorage.getItem("blogTheme")=="acrylic"){
document.getElementById("css").href="";
}
switchTheme=function(){
if(document.getElementById("css").href==window.location.protocol+"//"+window.location.host+"/css/stylessimple.css"){
document.getElementById("css").href=""
localStorage.setItem("blogTheme","acrylic");
}else{
document.getElementById("css").href="/css/stylessimple.css"
localStorage.setItem("blogTheme","simple");
}
}
setColor=function(c){
document.getElementById("themeColor").innerText=`:root{--lyx-theme:var(--lyx-${c})!important}`;
localStorage.setItem("themeColor",c);

}
setFont=function(n){
localStorage.setItem("font",n);
if(n=="main"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else if(n=="HYPailou"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="Fredoka,HYPailou,KyoukashoProL,-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else{
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,\"微软雅黑\", sans-serif"
}
document.body.style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,'微软雅黑', sans-serif"
document.documentElement.style.setProperty('--global-font', n)
}
}
if(localStorage.getItem("themeColor")==undefined){
localStorage.setItem("themeColor","pink");
}

setColor(localStorage.getItem("themeColor"));



if(localStorage.getItem("hideRightside")==undefined){
localStorage.setItem("hideRightside","0");
}

if(localStorage.getItem("hideRightside")=="1"){
$("#rightside").toggle()
}
toggleRightside=function(){
$("#rightside").toggle();
localStorage.setItem("hideRightside",Math.abs(Number(localStorage.getItem("hideRightside"))-1))
}
if(localStorage.getItem("font")==undefined){
localStorage.setItem("font","HYTMR")
}
setFont(localStorage.getItem("font"))
// 存数据
// name:命名 data:数据
saveData=function(name, data) {
localStorage.setItem(name, JSON.stringify({ 'time': Date.now(), 'data': data }))
}

// 取数据
// name:命名 time:过期时长,单位分钟,如传入30,即加载数据时如果超出30分钟返回0,否则返回数据
loadData=function(name, time) {
let d = JSON.parse(localStorage.getItem(name));
// 过期或有错误返回 0 否则返回数据
if (d) {
let t = Date.now() - d.time
if (t < (time * 60 * 1000) && t > -1) return d.data;
}
return 0;
}
// 切换背景函数
// 此处的flag是为了每次读取时都重新存储一次,导致过期时间不稳定
// 如果flag为0则存储,即设置背景. 为1则不存储,即每次加载自动读取背景.
changeBg=function(s, flag) {
let bg = document.getElementById('web_bg')
if (s.charAt(0) == '#') {
bg.style.backgroundColor = s
bg.style.backgroundImage = 'none'
} else bg.style.backgroundImage = s
if (!flag) { saveData('blogbg', s) }
}
// 上面两个函数如果你有其他需要存取数据的功能,也可以直接使用

// 读取背景
try {
let data = loadData('blogbg', 1440)
if (data) changeBg(data, 1)
else localStorage.removeItem('blogbg');
} catch (error) { localStorage.removeItem('blogbg'); }



fpssw=function(){
if(localStorage.getItem("fpson")=="1"){
localStorage.setItem("fpson","0");
}else{
localStorage.setItem("fpson","1");
}
}
$(".asetting").hide();
$('#backer').hide();
$("#"+localStorage.getItem("themeColor")).attr("checked", true);
if(localStorage.getItem("blur")=="false"){
document.getElementById("blur").checked=true;
}
if(localStorage.getItem("yjjs")=="true"){
document.getElementById("yjjs").checked=true;
}
if(localStorage.getItem("fpson")=="1"){
document.getElementById("fpson").checked=true;
}


if(localStorage.getItem("sakurahide")=="false"){
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else if(localStorage.getItem("sakurahide")==null){
localStorage.setItem("sakurahide","false");
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else{
setTimeout(
stopp,1000);
isSakura=0;
}
if(localStorage.getItem("aplayerhide")=="false"){
document.getElementById("hideAplayer").checked=true;
}
else if(localStorage.getItem("aplayerhide")==null){
localStorage.setItem("aplayerhide","false");
document.getElementById("hideAplayer").checked=true;
}
else{
doStuff=function() {
flag=0;
try{
ap=aplayers[0];
ap.list;
flag=1;
}catch{
setTimeout(doStuff, 50);
return;
}
if(flag){
$(".aplayer-fixed").hide()
}
}
doStuff();

}

document.getElementsByClassName("reSettings")[0].onclick=function(){
localStorage.clear()
window.location.reload()
}

toggleWinbox=function(){
$("#settingWindow").fadeToggle();
if(document.getElementById("settingWindow").style.display!="none"){
document.getElementById("settingWindow").style.display="flex";
}
}
fullScreen=function() {
if (document.fullscreenElement) document.exitFullscreen()
else document.documentElement.requestFullscreen();
}
toggleAside=function(){
const $htmlDom = document.documentElement.classList
$htmlDom.contains('hide-aside')
? saveToLocal.set('aside-status', 'show', 2)
: saveToLocal.set('aside-status', 'hide', 2)
$htmlDom.toggle('hide-aside')
}
toggleAplayer=function(){
$(".aplayer-fixed").toggle()
if(localStorage.getItem("aplayerhide")=="true"){
localStorage.setItem("aplayerhide",false);
}
else{
localStorage.setItem("aplayerhide",true);
}
}
// position = $(window).scrollTop();
// $(window).scroll(function () {

// scroll = $(window).scrollTop();

// if (scroll > position) {
// document.getElementsByTagName("header")[0].style.transform="translateY(58px)";
// } else {


// document.getElementsByTagName("header")[0].style.transform="";

// }

// position = scroll;
// });
toggleSakuras=function(){
isSakura=!isSakura;
stopp(isSakura);
if(localStorage.getItem("sakurahide")=="true"){
localStorage.setItem("sakurahide",false);
}
else{
localStorage.setItem("sakurahide",true);
}
}
switchAside=function(){
if(left){
document.getElementById("aside-content").classList.add("right");
document.querySelector(".layout > div:first-child").classList.add("left");
localStorage.setItem("leftAside","false");
}
else{
document.getElementById("aside-content").className="aside-content";
document.querySelector(".layout > div:first-child").className="";
try{
document.querySelector("#recent-posts").className="recent-posts";
}catch(err){}localStorage.setItem("leftAside","true");}
left=!left;
}
left=1;
if(localStorage.getItem("leftAside")=="true"||localStorage.getItem("leftAside")==null){

}else{
switchAside();
}
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
document.getElementById("autoTheme").checked=true;
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
}
if(location.href.indexOf('posts')!=-1){
var xhr = new XMLHttpRequest();
var url = document.querySelector('#page-header').style.backgroundImage.split('url("')[1].split('")')[0];
xhr.open("GET","https://apis.yisous.xyz/api/imageColor?imgurl="+url, true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState===4) {
if(xhr.status===200) {
document.getElementById("themeColor").innerText=`:root{--lyx-theme:${xhr.responseText}!important}`;
}
}
}
}
toggleAutoTheme=()=>{
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
$("#con-mode").show();
}
else{
localStorage.setItem("autoTheme","true");
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
$("#con-mode").hide();
}
}
}
switchDarkMode = function () {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
};
- -

新建css

-
/*使用了Chrome105新特性has,兼容性不好qwq*/
.con-rightside{
height:50px!important;
width: 50px!important;
border-radius: 30px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
margin:10px;
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
.con-rightside i::before{
font-size:30px;
}
[data-theme="dark"] .con-rightside i::before{
color:white
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
@media screen and (max-width:600px){
.con-rightside i::before{
font-size: 16px;
}
.con-rightside{
height:20px!important;
width:20px!important;
}
}
@media screen and (max-width:768px){
#con-barrage{
display: none!important;
}
}
#setting-buttons{
display: flex;
flex-wrap: wrap;
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#setting-sides{
margin-left: auto;
}
#setting-sides{
white-space: nowrap;
}
#setting-sidesl{
display: flex;
}
.settings .content{
margin-left:20px;
}
.settings{
margin:15px
}
/* 开关 */
.settings input[type="checkbox"] {
width: 38px;
height: 20px;
position: relative;
border: 1px solid #000000;
background-color: #0000;
border-radius: 12px;
background-clip: content-box;
display: inline-block;
-webkit-appearance: none;
user-select: none;
outline: none;
transform: translateY(5px);}
[data-theme="dark"] .settings input[type="checkbox"] {
border: 1px solid white;
}
.settings input[type="checkbox"]:before {
content: '';
width: 12px;
height: 12px;
position: absolute;
top: 3px;
left: 5px;
border-radius: 10px;
background-color: #000;}
[data-theme="dark"] .settings input[type="checkbox"]:before{
background-color: white;
}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);border-color:var(--lyx-theme)}
.settings input[type="checkbox"]:checked:before {
left: 19px;background-color: white!important;}

.settings input[type="checkbox"] {
transition: border background-color box-shadow }
.settings input[type="checkbox"]:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);
/* transition: border ease 0.4s, background-color ease 1.2s; */
}.settings input[type="checkbox"]:checked:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked:hover{
opacity: 0.8;
}
.settings input[type="checkbox"]:active{
background-color: #666666!important;
border-color:#666666!important;
}
.settings input[type="checkbox"]:active::before{
background-color:white!important;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
position: fixed;
display: block;
width: 80%;
max-width: 800px;
left: 50%;
top: 50%;
max-height: 80%;
background-color: #ffffffdd;
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border: 1px solid var(--lyx-border);
padding:30px;
backdrop-filter: blur(10px);
-ms-transform-origin-y:translate(-50%,-50%);
-webkit-transform:translate(-50%,-50%);
-moz-transform:translate(-50%,-50%);
-ms-transform:translate(-50%,-50%);
-o-transform:translate(-50%,-50%);
z-index: 514;
display: none;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
display: none;
flex-direction: column;
}
.settingx{
width: 46%;
text-align: left;
font-size: 28px;
padding: 10px;
margin: 10px;
background-color: var(--lyx-light-grey);
opacity: 0.8;
border-radius: 10px;
}
.settingx:hover{
background-color: var(--lyx-gray);
}
.settingx i{
margin: 5px;
}
@media screen and (max-width:768px){
.settingx{
width:100%!important;
}
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#close-console{
text-align: right;
}
#stt,#close-console{
margin-left: auto;
}
#close-console:not(#close-console:hover){
color: var(--global-font-color);
}
- -

然后在[blogRoot]/themes/butterfly/layout/includes/layout.pug中添加:

-
...
include ./rightside.pug
! =partial('includes/third-party/search/index', {}, {cache: true})
+ ! =partial('includes/setting',{}, {cache:false})
- -

还要引入一些外挂css标签:

-
inject:
head:
- <style id="settingStyle"></style>
- <style id="css"></style>
- <style id="themeColor"></style>
...
bottom:
- <script type="text/javascript" src="https://gcore.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
...

- -

butterfly\layout\includes\rightside.pug添加按钮

-
when 'comment'
if commentsJsLoad
a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment"))
i.fas.fa-comments
+ when 'bg'
+ button(type="button" title='切换背景' onclick="toggleWinbox()")
+ i.fas.fa-display
- -

然后修改:

-
#rightside
- const { enable, hide, show } = theme.rightside_item_order
- const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside']
- - const showArray = enable ? show && show.split(',') : ['toc','chat','comment']
+ - const showArray = enable ? show && show.split(',') : ['toc','chat','comment','bg']
-

修改鼠标样式

-

致美化下载鼠标样式

-
-

在css中添加并修改:

-
/* 全局默认鼠标指针 */
body,
html {
cursor: url('/self/img/cursors/mogu/normal.cur'),auto !important;
}
/* 悬停图片时的鼠标指针 */
img {
cursor: url('/self/img/cursors/mogu/normal.cur'), auto !important;
}
/* 悬停图片弹出窗口时的鼠标指针 */
.fancybox__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
.carousel__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择链接标签时的鼠标指针 */
a:hover,#site-name:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择代码框展开和复制按钮时的鼠标指针 */
.copy-button:hover,.expand:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选中输入框时的鼠标指针 */
input:hover, textarea:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停按钮时的鼠标指针 */
button:hover,.scroll-down-effects:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页脚链接标签(例如页脚徽标)时的鼠标指针 */
#footer-wrap a:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页码时的鼠标指针 */
#pagination .page-number:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停菜单栏时的鼠标指针 */
#nav .site-page:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停滚动条的鼠标指针(只对Chrome有效) */
::-webkit-scrollbar:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
/* 悬停评论按钮的鼠标指针(我使用的是Gitalk/Valine) */
.switch-btn,.switch-btn:before,.gt-user-inner,.gt-ico,.gt-user-name,.gt-btn,.vbtn,svg,.at_button{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停非链接文本时的鼠标指针 */
h1,h2,h3,h4,h5,h6,#subtitle,.content,.line,.post-content p,.post-content li{
cursor: url('/self/img/cursors/mogu/text.ani'), auto;
}
/* 悬停文章日期 */
.post-meta-date:hover,.post-meta-date-created:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
]]> @@ -862,60 +820,42 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for 工具教程 - Butterfly + docker - redis的3主3从扩容 - /posts/51796.html - redis的3主3从扩容

首先添加两个redis

# 创建redis-node-7
docler run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
# 创建redis-node-8
docler run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
- -

注:在阿里云的安全组和防火墙上添加6387,16387 6388,16388四个端口

-

配置步骤:

执行docker exec -it redis-node-1 bash 进入redis-node-1里面
执行redis-cli --cluster add-node 8.142.144.75:6387 8.142.144.75:6381
- -
- - - -

6387 新加入的节点

-

6381 相当于6387的领路人

-
使用redis-cli --cluster check 8.142.144.75:6381检查
- -
- -
重新分配槽号
-

redis-cli –cluster reshard IP地址:端口号

-
-
- -
- -

注:上图的1指的是:对主机数平分16384个节点,16384/主机数(包含想要添加的主机)

-

注:上图的2指的是:新加入的6387节点的ID

-
- -
- -

all:表示全部进行重新分配

-

在重新加载过程会碰到Do you want to proceed with the proposed reshard plan (yes/no)?一句话,选择yes就可以

-
- -
- -
检查集群情况
- -
- -
为主节点6387分配从节点6388
-

redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID

+ 容器(一) + /posts/26726.html + 容器(一)

新建和启动容器

OPTIONS说明:

    +
  • – name = “容器新名称” 为容器制定一个名称
  • +
  • -d 后台运行容器并返回容器id, 即启动守护式容器(后台运行)
  • +
  • -i 以交互模式运行容器,通常与 -t 同时使用
  • +
  • -t 为容器重新分配一个伪输入终端,通常与 -i 连用,也就是启动交互式容器
  • +
  • -P 随机端口映射
  • +
  • -p 指定端口映射
  • +
+

举个栗子

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu:15.10 /bin/bash
root@4fb757f69adb:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:26 pts/0 00:00:00 /bin/bash
root 11 1 0 03:26 pts/0 00:00:00 ps -ef
root@4fb757f69adb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4fb757f69adb:/# exit
exit
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
+

docker run -it ubuntu:15.10 /bin/bash
/bin/bash 希望有交互式shell 就用/bin/bash

+

查询正在运行的容器

+

docker ps [OPTIONS]

-
- -
- -
检查集群情况
- -
+
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdee90a8c77d ubuntu "bash" 3 minutes ago Exited (0) 3 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 5 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
+

OPTIONS:

+
    +
  • -a 展示所有容器,包含历史用过容器
  • +
  • -d 只展示容器id
  • +
  • -l 显示最近创建的容器
  • +
  • -n 展示最近创建的前n个容器
    List containers
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -n 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 2
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    0dcaa91afc0e ubuntu "/bin/bush" 19 minutes ago Created myubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

  • +
+

退出容器

    +
  • exit
  • +
+

run进入容器,exit退出容器, 容器停止

+
    +
  • ctrl + p + q
  • +
+

run进入容器,exit退出容器, 容器不停止

+
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu bash
root@562278524cda:/# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 16 seconds ago Up 15 seconds loving_dewdney
]]>
工具教程 @@ -925,106 +865,31 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - redis的4主4从缩容 - /posts/622.html - redis的4主4从缩容
目的:6387和6388下线
检查集群情况获得6388的节点ID
-

redis-cli –cluster check 8.142.144.75:6382

+ 容器(二) + /posts/63516.html + 容器(二)

启动已经停止运行的容器

+

docker start 容器id/容器名

-
- -
+
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
9a1a43aee837 ubuntu "bush" 4 minutes ago Created admiring_wiles
cdee90a8c77d ubuntu "bash" 29 minutes ago Exited (0) 29 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 31 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker start cdee90a8c77d
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 5 minutes ago Up 5 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 30 minutes ago Up 3 seconds ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
-
从集群中将4号从节点6388删除
-

redis-cli –cluster del-node ip:从机端口 从机6388节点ID

+

重启容器

+

docker restart 容器id/容器名

-
- -
- -
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
- -
- -

6388删除成功

-
将6387的槽号清空,重新分配

本例将清出来的槽号都给6381

-

使用redis-cli --cluster reshard ip:6381进行节点的重组

-
- -
- -

注:

-

上图中1输入的4096是6387主机所拥有的槽点数量,把他们全部拿出来分掉

-

上图的2输入的ID是接收6387主机所放出的槽点数的主机id

-

上图中3输入的ID是放出槽点数的6387主机的id

-

上图中4输入的done指的是已经输入完所有的节点

-
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
- -
- -
删除6387节点的主机
-

redis-cli –cluster del-node ip:端口 6387节点ID

+

停止容器

+

docker stop 容器id/容器名

-
- -
- -
使用redis-cli --cluster check 8.142.144.75:6382进行集群检查
- -
]]> - - 工具教程 - - - docker - - - - 使用docker安装常用软件:mysql - /posts/58312.html - 使用docker安装常用软件:mysql

以mysql 5.7为例

使用docker pull mysql:5.7拉取mysql 5.7镜像

-

使用镜像创建容器

简单版

使用docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7运行镜像创建容器

-
-

因为linux系统自己装了mysql,避免端口冲突,先运行ps -ef|grep mysql查询

+

强制停止容器

+

docker kill 容器id/容器名

-

使用docker ps查询容器编号

-

使用docker exec -it 容器编号 bash进入mysql容器

-

使用mysql -uroot -p,输入密码,登录mysql

-
验证

show databases

-
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
- -
中文乱码问题
INSERT INTo t1 VALUES(3, "张三");
---
INSERT INTo t1 VALUES(3, "张三")
> 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
> 时间: 0.038s
- -

因为docker默认编码字符集隐患

-
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>
- -

解决中文乱码问题

在宿主机的/ggls/mysql/conf目录下vim my.cnf文件,通过容器卷同步给容器实例

-
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
- -

改完后重启mysql实例

-
服务器输入SHOW VARIABLES LIKE 'character%';验证

docker安装好并run出容器后,先修改字符集编码在创建mysql库

-
删库备份问题

只要本机上面的容器卷存在,容器卷位置没有改变的情况下,就算容器被删除,重新打开后,创建的数据库,表都还存在

-

工作使用版启动容器方法

-
docker run -d -p 3306:3306 --privileged=true
-v /ggls/mysql/log:/var/log/mysql
-v /ggls/mysql/data:/var/lib/mysql
-v /ggls/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7
- - - -]]> - - 工具教程 - - - docker - - - - 使用docker安装常用软件:redis - /posts/32161.html - 使用docker安装常用软件:redis

使用docker pull redis:6.0.8 拉取redis:6.0.8镜像

-

创建容器

-
-

容器卷要加入--privileged=true

+

删除已经停止的容器

+

docker rm 容器id

-

在宿主机下新建目录mkdir -p /app/redis

+

一次性删除多个容器

    +
  • docker rm -f $(docker ps -a -q)
  • +
  • docker ps -a -q | xargs docker rm
  • +
+

注:xargs是linux系统的可变参数,把分隔符前面的结果传给xargs里面,然后执行分隔符后面的命令

+
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 20 minutes ago Up 20 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 45 minutes ago Up 15 minutes ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f
562278524cda
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

]]> 工具教程 @@ -1034,141 +899,11 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - 使用docker安装常用软件:tomcat - /posts/50699.html - 使用docker安装常用软件:tomcat

安装流程

首先把tomcat在镜像源中pull下来,使用docker images 查看镜像

-

使用docker run -d -p 8080:8080 tomcat:9.0 新建容器运行tomcat

+ 容器(三) + /posts/62565.html + 容器(三)

创建后台守护式容器

(问题):使用docker run -d ubuntu命令启动后台模式的容器ubuntu,然后用docker ps 查询提示没有找到运行的容器

-

运行后使用本地PC使用阿里云的ip和端口访问docker上面的tomcat

-
-
- -
- - - -

这是什么原因呢

使用docker ps查询到容器编号,docker exec -it 容器编号 bash 打开容器

-
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c52ab6b8b8df b8e65a4d736d "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp inspiring_bohr
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker exec -it c52ab6b8b8df bash
root@c52ab6b8b8df:/usr/local/tomcat#
- -

使用ls-l查看文件列表

-
root@c52ab6b8b8df:/usr/local/tomcat# ls -l
total 156
-rw-r--r-- 1 root root 18970 Dec 2 14:30 BUILDING.txt
-rw-r--r-- 1 root root 6210 Dec 2 14:30 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Dec 2 14:30 LICENSE
-rw-r--r-- 1 root root 2333 Dec 2 14:30 NOTICE
-rw-r--r-- 1 root root 3378 Dec 2 14:30 README.md
-rw-r--r-- 1 root root 6898 Dec 2 14:30 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Dec 2 14:30 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 22 17:16 bin
drwxr-xr-x 1 root root 4096 Apr 29 01:48 conf
drwxr-xr-x 2 root root 4096 Dec 22 17:16 lib
drwxrwxrwx 1 root root 4096 Apr 29 01:48 logs
drwxr-xr-x 2 root root 4096 Dec 22 17:16 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 22 17:16 temp
drwxr-xr-x 2 root root 4096 Dec 22 17:16 webapps
drwxr-xr-x 7 root root 4096 Dec 2 14:30 webapps.dist
drwxrwxrwx 2 root root 4096 Dec 2 14:30 work
root@c52ab6b8b8df:/usr/local/tomcat#
- -

从列表可以看到有两个文件夹webappswebapps.dist,数据全部在webapps.dist里面,需要将webapps删除,把webapps.dist重命名成webapps即可访问

-

使用rm -rf webapps删除webapps文件夹

-

使用mv webapps.dist webapps 重命名

-

再次使用本地访问

-
- -
- - -

使用免修改版的tomcat

-

docker pull billygoo/tomcat8-jdk8

-

docker run -d -p 8080:8080 –name tomcat8 billygoo/tomcat8-jdk8

-
-]]>
- - 工具教程 - - - docker - -
- - 容器数据卷 - /posts/1351.html - 容器数据卷

运行带有容器数据卷的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
- -

举个栗子

-

宿主vs容器之间映射添加容器卷

-
-
    -
  • 使用docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 添加
  • -
-
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ui ubuntu
- -
    -
  • 查看数据卷是否挂载成功
  • -
-
`在容器内部创建一个dockerin.txt文件
root@48955acecd79:/tmp/docker_data# touch dockerin.txt
root@48955acecd79:/tmp/docker_data# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 28 09:21 ./
drwxrwxrwt 1 root root 4096 Apr 28 09:18 ../
-rw-r--r-- 1 root root 0 Apr 28 09:21 dockerin.txt
`在宿主机目录下查看该文件
root@48955acecd79:/tmp/docker_data# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# cd /tmp/host_data/
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 28 17:21 dockerin.txt
`在宿主机创建一个文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# touch host.txt

`在容器查看文件
[root@iZ8vbfaek3x3ogtpxnpnwfZ host_data]# docker exec -it 48955acecd79 bash
root@48955acecd79:/# cd /tmp/docker_data/

+ 容器和宿主机之间数据共享

[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# shell

+ 主机修改,docker同步获得

+ docker容器stop,主机修改,docker容器重启数据同步

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f562278524cdacdee90a8c77d

+ 默认是可读可写的

```shell
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
- - - -
    -
  • 修改成容器只读
  • -
-
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
- -
-

卷的继承和共享

-
-
    -
  • 容器1完成和宿主机的映射
      -
    • 容器2继承容器1,则容器2操作后同步到容器1和宿主机
    • -
    • 宿主机操作同步到容器1,容器2
    • -
    • 容器1操作同步到宿主机,容器2
    • -
    -
  • -
-
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
- - - -]]>
- - 工具教程 - - - docker - -
- - 容器(一) - /posts/26726.html - 容器(一)

新建和启动容器

OPTIONS说明:

    -
  • – name = “容器新名称” 为容器制定一个名称
  • -
  • -d 后台运行容器并返回容器id, 即启动守护式容器(后台运行)
  • -
  • -i 以交互模式运行容器,通常与 -t 同时使用
  • -
  • -t 为容器重新分配一个伪输入终端,通常与 -i 连用,也就是启动交互式容器
  • -
  • -P 随机端口映射
  • -
  • -p 指定端口映射
  • -
-

举个栗子

[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu:15.10 /bin/bash
root@4fb757f69adb:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:26 pts/0 00:00:00 /bin/bash
root 11 1 0 03:26 pts/0 00:00:00 ps -ef
root@4fb757f69adb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4fb757f69adb:/# exit
exit
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
-

docker run -it ubuntu:15.10 /bin/bash
/bin/bash 希望有交互式shell 就用/bin/bash

-

查询正在运行的容器

-

docker ps [OPTIONS]

-
-
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdee90a8c77d ubuntu "bash" 3 minutes ago Exited (0) 3 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 5 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
-

OPTIONS:

-
    -
  • -a 展示所有容器,包含历史用过容器
  • -
  • -d 只展示容器id
  • -
  • -l 显示最近创建的容器
  • -
  • -n 展示最近创建的前n个容器
    List containers
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -n 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 1
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -an 2
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cdee90a8c77d ubuntu "bash" 17 minutes ago Exited (0) 17 minutes ago ubuntu
    0dcaa91afc0e ubuntu "/bin/bush" 19 minutes ago Created myubuntu
    [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

  • -
-

退出容器

    -
  • exit
  • -
-

run进入容器,exit退出容器, 容器停止

-
    -
  • ctrl + p + q
  • -
-

run进入容器,exit退出容器, 容器不停止

-
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker run -it ubuntu bash
root@562278524cda:/# [root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 16 seconds ago Up 15 seconds loving_dewdney
-]]>
- - 工具教程 - - - docker - -
- - 容器(三) - /posts/62565.html - 容器(三)

创建后台守护式容器

(问题):使用docker run -d ubuntu命令启动后台模式的容器ubuntu,然后用docker ps 查询提示没有找到运行的容器

-
-

Docker容器后台运行就必须有一个前台进程,不然容器没事做,会自杀

+

Docker容器后台运行就必须有一个前台进程,不然容器没事做,会自杀

解决方法:将运行的程序以前台进程的方式运行
常见方式:命令行模式

查看容器日志

@@ -1220,40 +955,6 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for docker - - 容器(二) - /posts/63516.html - 容器(二)

启动已经停止运行的容器

-

docker start 容器id/容器名

-
-
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
9a1a43aee837 ubuntu "bush" 4 minutes ago Created admiring_wiles
cdee90a8c77d ubuntu "bash" 29 minutes ago Exited (0) 29 minutes ago ubuntu
0dcaa91afc0e ubuntu "/bin/bush" 31 minutes ago Created myubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 4 minutes ago Up 4 minutes loving_dewdney
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker start cdee90a8c77d
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 5 minutes ago Up 5 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 30 minutes ago Up 3 seconds ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#
- -

重启容器

-

docker restart 容器id/容器名

-
-

停止容器

-

docker stop 容器id/容器名

-
-

强制停止容器

-

docker kill 容器id/容器名

-
-

删除已经停止的容器

-

docker rm 容器id

-
-

一次性删除多个容器

    -
  • docker rm -f $(docker ps -a -q)
  • -
  • docker ps -a -q | xargs docker rm
  • -
-

注:xargs是linux系统的可变参数,把分隔符前面的结果传给xargs里面,然后执行分隔符后面的命令

-
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562278524cda ubuntu "bash" 20 minutes ago Up 20 minutes loving_dewdney
cdee90a8c77d ubuntu "bash" 45 minutes ago Up 15 minutes ubuntu
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps -a -q | xargs docker rm -f
562278524cda
cdee90a8c77d
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ8vbfaek3x3ogtpxnpnwfZ ~]#

-]]>
- - 工具教程 - - - docker - -
本地镜像发布到私有库 /posts/42395.html @@ -1318,6 +1019,39 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for +]]> + + 工具教程 + + + docker + + + + 镜像 + /posts/55045.html + 镜像

背景

docker镜像是最小的,被精简过的Linux系统,是不带vim命令的

+
+

使用命令 ‘vim a.txt’ 进行新建编辑a.txt文件,就会提示找不到命令

+
+

给镜像容器新增vim命令

    +
  1. 更新镜像

    +
    +

    apt-get update

    +
    +
  2. +
  3. 下载vim功能

    +
    +

    apt-get -y install vim

    +
    +
  4. +
  5. 提交副本使成为一个新镜像

    +
    +

    docker commit -m=”提交的描述信息” -a=”作者” 容器id 要创建的目标镜像名:[标签名]

    +
    +
  6. +
+
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
356e32244966 mytest/ubuntu:3.5 "bash" 2 hours ago Up 2 hours elated_aryabhata
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5
sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ggls/ubuntu 1.5 87e99e19eeef 7 seconds ago 176MB
mytest/ubuntu 3.5 a92a27affdde 2 hours ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
]]>
工具教程 @@ -1364,838 +1098,644 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for
- 镜像 - /posts/55045.html - 镜像

背景

docker镜像是最小的,被精简过的Linux系统,是不带vim命令的

-
-

使用命令 ‘vim a.txt’ 进行新建编辑a.txt文件,就会提示找不到命令

-
-

给镜像容器新增vim命令

    -
  1. 更新镜像

    -
    -

    apt-get update

    + Butterfly美化记录 + /posts/54899.html + +

    注:这个魔改转载于Ariasakaの小窝

    -
  2. -
  3. 下载vim功能

    -
    -

    apt-get -y install vim

    +

    导航栏

    分离菜单栏和搜索栏

    让搜索栏放在最右侧,其他的导航栏居中

    +

    修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug:

    +
    nav#nav
    span#blog_name
    a#site-name(href=url_for('/')) #[=config.title]

    #menus
    - if (theme.algolia_search.enable || theme.local_search.enable)
    - #search-button
    - a.site-page.social-icon.search
    - i.fas.fa-search.fa-fw
    - span=' '+_p('search.title')
    !=partial('includes/header/menu_item', {}, {cache: true})
    #nav-right
    + if (theme.algolia_search.enable || theme.local_search.enable)
    + #search-button
    + a.site-page.social-icon.search
    + i.fas.fa-search.fa-fw
    - #toggle-menu
    - a.site-page
    - i.fas.fa-bars.fa-fw
    + #toggle-menu
    + a.site-page
    + i.fas.fa-bars.fa-fw
    + +

    修改的文件nav.pug,版本为Butterfly 4.10.0

    +
    nav#nav
    span#blog-info
    a(href=url_for('/') title=config.title)
    if theme.nav.logo
    img.site-icon(src=url_for(theme.nav.logo))
    if theme.nav.display_title
    span.site-name=config.title

    #menus
    !=partial('includes/header/menu_item', {}, {cache: true})

    #nav-right
    if (theme.algolia_search.enable || theme.local_search.enable || theme.docsearch.enable)
    #search-button
    a.site-page.social-icon.search(href="javascript:void(0);")
    i.fas.fa-search.fa-fw

    #toggle-menu
    a.site-page
    i.fas.fa-bars.fa-fw
    + + + +

    居中

    使用自定义[blogRoot]/self/css/meihua.css,添加下面的代码

    +
    #nav-right{
    flex:1 1 auto;
    justify-content: flex-end;
    margin-left: auto;
    display: flex;
    flex-wrap:nowrap;
    }
    + +

    去掉导航栏下的蓝色长条

    在自定义[blogRoot]/self/css/meihua.css里面添加

    +
    #nav *::after{
    background-color: transparent!important;
    }
    + +

    子菜单横向布局

    在自定义[blogRoot]/self/css/meihua.css里面添加

    +
    /* ----------导航栏横向下拉框---------- */

    .menus_item_child li:not(#sidebar-menus li){
    float: left;
    border-radius: 6px!important;
    -webkit-border-radius: 6px!important;
    -moz-border-radius: 6px!important;
    -ms-border-radius: 6px!important;
    -o-border-radius: 6px!important;
    }
    .menus_item_child:not(#sidebar-menus ul){
    /*left:calc(-150%)!important;*//*这是估算值,为了保持元素居中的,如果不合适可以自己调*/
    left:50%;
    translate:-50%;
    }
    + +

    显示标题

    修改[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug

    +
    nav#nav
    span#blog_name
    a#site-name(href=url_for('/')) #[=config.title]

    #menus
    !=partial('includes/header/menu_item', {}, {cache: true})
    + center(id="name-container")
    + a(id="page-name" href="javascript:scrollToTop()") PAGE_NAME
    ...
    + +

    [blogRoot]/self/js/创建jquery.js文件,添加以下代码

    +
    /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
    !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
    + +

    然后添加nav.js,并且按照注释修改配置

    +
    //js有一个小问题:就是只要鼠标滚动不论哪里都会响应,即便你滚动的是子元素

    //2022.9.11 已修复,需要jq,请自行引入
    document.getElementById("name-container").setAttribute("style", "display:none");

    var position = $(window).scrollTop();

    $(window).scroll(function () {

    var scroll = $(window).scrollTop();

    if (scroll > position) {


    document.getElementById("name-container").setAttribute("style", "");
    document.getElementsByClassName("menus_items")[1].setAttribute("style", "display:none!important");

    } else {


    document.getElementsByClassName("menus_items")[1].setAttribute("style", "");
    document.getElementById("name-container").setAttribute("style", "display:none");

    }

    position = scroll;

    });
    function scrollToTop(){
    document.getElementsByClassName("menus_items")[1].setAttribute("style","");
    document.getElementById("name-container").setAttribute("style","display:none");
    btf.scrollToDest(0, 500);
    }
    //修复没有弄右键菜单的童鞋无法回顶部的问题
    document.getElementById("page-name").innerText = document.title.split(" | Ariasakaの小窝")[0];
    /*这里是去掉你的网站全局名称的设置,如果你不需要去掉,你可以写成:
    document.getElementById("page-name").innerText=document.title

    或者把你的网站的分隔符和全局网站名称加上去*/

    + +

    最后添加如下css,按照注释修改参数:

    +
    /*
    2022.10.4更新:
    根据我发现的没有自适应,间距不合理问题进行调整,如果用了这个的朋友们建议改一改
    */
    #page-name::before{
    font-size:18px;
    position: absolute;
    width:100%;
    height:100%;
    border-radius: 8px;
    color:white!important;
    top:0;
    left:0;
    content:'回到顶部';
    background-color: var(--lyx-theme);
    transition: all .3s;
    -webkit-transition: all .3s;
    -moz-transition: all .3s;
    -ms-transition: all .3s;
    -o-transition: all .3s;
    opacity: 0;
    box-shadow: 0 0 3px var(--lyx-theme);
    line-height: 45px; /*如果垂直位置不居中可以微调此值,也可以删了*/
    }
    #page-name:hover:before{
    opacity: 1;
    }
    @media screen and (max-width:900px){
    #page-name,#menus{
    display:none!important;
    }
    }

    #name-container{
    transition: all .3s;
    -webkit-transition: all .3s;
    -moz-transition: all .3s;
    -ms-transition: all .3s;
    -o-transition: all .3s;
    }
    #name-container:hover{
    scale:1.03
    }
    #page-name{
    position: relative;
    padding:10px 30px/*如果文字间隔不合理可以微调修改,第二个是水平方向的padding,第一个是垂直的*/
    }
    #nav{
    padding: 0 20px;
    }

    + +

    导航栏显示haver颜色

    在自定义[blogRoot]/self/css/meihua.css里面添加

    +
    /* ----------修改导航栏的haver---------- */

    .site-page {
    padding: 5px;
    margin: 3px;
    padding-left: 10px;
    padding-right: 10px;
    white-space: nowrap;
    }
    .site-page:hover {
    background-color: var(--gglss-theme);
    box-shadow: 0 0 3px var(--gglss-theme)!important;
    border-radius: 5px;
    }
    .site-page.child:hover {
    background-color: var(--gglss-theme)!important;
    box-shadow: 0 0 3px var(--gglss-theme)!important;
    border-radius: 4px;
    }

    /* ----------网站标题部分的增强版---------- */
    #site-name::before{
    opacity: 0;
    background-color: var(--gglss-theme)!important;
    border-radius: 8px;
    -webkit-border-radius: 8px;
    -moz-border-radius: 8px;
    -ms-border-radius: 8px;
    -o-border-radius: 8px;
    transition: .3s;
    -webkit-transition: .3s;
    -moz-transition: .3s;
    -ms-transition: .3s;
    -o-transition: .3s;
    position:absolute;
    top:0!important;
    right:0!important;
    width:100%;
    height:100%;
    content: "\f015";
    box-shadow: 0 0 5px var(--gglss-theme);
    font-family: "Font Awesome 6 Free";
    text-align: center;
    color:white;
    line-height:34px;/*如果有溢出或者垂直不居中的现象微调一下这个参数*/
    font-size: 18px;/*根据个人喜好*/
    }
    #site-name:hover::before{
    opacity: 1;
    scale:1.03;
    }
    #site-name{
    position: relative;
    font-size: 24px; /*一定要把字体调大点,否则效果惨不忍睹!*/
    }
    :root{
    --gglss-theme:#49B1F5 /*我的主题色*/
    }

    + +

    侧边栏分类归档美化

    修改 aside_archives文件

    打开 [you_blog]\themes\butterfly\scripts\helpers\aside_archives.js 修改第 92 行左右。

    +
    result += transform ? transform(item.name) : item.name
    result += '</span>'

    if (showCount) {
    - result += `<span class="card-archive-list-count">${item.count}</span>`
    + result += `<div class="card-archive-list-count-group"><span class="card-archive-list-count">${item.count}</span><span>篇</span></div>`
    }
    result += '</a>'
    result += '</li>'

    + +

    增加css

    在自定义[blogRoot]/self/css/meihua.css文件中添加如下代码:

    +
    /* 侧栏归档样式start */
    span.card-archive-list-count {
    width: auto;
    text-align: left;
    font-size: 1.5rem;
    line-height: 0.9;
    font-weight: 700;
    }
    .card-archive-list-count-group {
    display: flex;
    flex-direction: row;
    align-items: baseline;
    }
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child {
    width: fit-content;
    margin-left: 4px;
    }
    span.card-archive-list-count {
    width: auto;
    text-align: left;
    font-size: 1.1rem;
    line-height: 0.9;
    font-weight: 700;
    }
    .card-archive-list-date {
    font-size: 14px;
    opacity: 0.6;
    }
    li.card-category-list-item {
    flex: 0 0 31%;
    }
    li.card-archive-list-item {
    flex: 0 0 48%;
    }
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
    color: #fff;
    /* background-color: #3b70fc; */
    background-color: #49B1F5; /*侧边栏的鼠标悬浮颜色*/
    box-shadow: 0 8px 12px -3px #4259ef23;
    border-radius: 8px;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
    }
    @media screen and (min-width: 1300px) {
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover {
    transform: scale(1.03);
    }
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a:active {
    transform: scale(0.97);
    }
    }
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a {
    border-radius: 8px;
    margin: 4px 0;
    display: flex;
    flex-direction: column;
    align-content: space-between;
    border: 1px solid #e3e8f7;
    }
    #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child,
    #aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child {
    width: auto;
    flex: inherit;
    }
    #aside-content .card-archives ul.card-archive-list,
    #aside-content .card-categories ul.card-category-list {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    flex-wrap: wrap;
    }
    /* 侧栏归档样式end */

    + +

    添加夜间模式的转换动画

    +

    转自雷雷屋头

    -
  4. -
  5. 提交副本使成为一个新镜像

    -
    -

    docker commit -m=”提交的描述信息” -a=”作者” 容器id 要创建的目标镜像名:[标签名]

    +

    新建 sun_moon.pug

    [you_blog]\themes\butterfly\layout\includes\custom\ 文件夹下,新建 sun_moon.pug 文件

    +
    svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0')
    symbol#icon-sun(viewBox='0 0 1024 1024')
    path(d='M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z', fill='#FFD878', p-id='8420')
    path(d='M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z', fill='#FFE4A9', p-id='8421')
    path(d='M512 109.248L626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z', fill='#4D5152', p-id='8422')
    path(d='M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z', fill='#4D5152', p-id='8423')
    symbol#icon-moon(viewBox='0 0 1024 1024')
    path(d='M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z', fill='#FFB531', p-id='11345')
    path(d='M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z', fill='#030835', p-id='11346')


    + +

    新建css

    [blogRoot]/self/css/新建sun_moon.css,增加下面的代码

    +
    /* 白天夜晚切换动画start */
    .Cuteen_DarkSky, .Cuteen_DarkSky:before {
    content: '';
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    z-index: 88888888;
    }
    .Cuteen_DarkSky {
    background: linear-gradient(#feb8b0, #fef9db);
    }
    .Cuteen_DarkSky:before {
    transition: 2s ease all;
    opacity: 0;
    background: linear-gradient(#4c3f6d, #6c62bb, #93b1ed);
    }
    .DarkMode .Cuteen_DarkSky:before {
    opacity: 1;
    }
    .Cuteen_DarkPlanet {
    z-index: 99999999;
    position: fixed;
    left: -50%;
    top: -50%;
    width: 200%;
    height: 200%;
    -webkit-animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
    animation: CuteenPlanetMove 2s cubic-bezier(0.7, 0, 0, 1);
    transform-origin: center bottom;
    }
    @-webkit-keyframes CuteenPlanetMove {
    0% {
    transform: rotate(0);
    }
    to {
    transform: rotate(360deg);
    }
    }
    .Cuteen_DarkPlanet:after {
    position: absolute;
    left: 35%;
    top: 40%;
    width: 9.375rem;
    height: 9.375rem;
    border-radius: 50%;
    content: '';
    background: linear-gradient(#fefefe, #fffbe8);
    }
    .search span {
    display: none;
    }
    .menus_item a {
    text-decoration: none !important;
    }
    .icon-V {
    padding: 5px;
    }
    @-moz-keyframes CuteenPlanetMove {
    0% {
    transform: rotate(0);
    }
    to {
    transform: rotate(360deg);
    }
    }
    @-webkit-keyframes CuteenPlanetMove {
    0% {
    transform: rotate(0);
    }
    to {
    transform: rotate(360deg);
    }
    }
    @-o-keyframes CuteenPlanetMove {
    0% {
    transform: rotate(0);
    }
    to {
    transform: rotate(360deg);
    }
    }
    @keyframes CuteenPlanetMove {
    0% {
    transform: rotate(0);
    }
    to {
    transform: rotate(360deg);
    }
    }
    /* 白天夜晚切换动画end */


    + +

    新建js

    [blogRoot]/self/js/新建`sun_moon.js,增加下面的代码

    +
    // 白天夜晚切换动画start
    function switchNightMode() {
    document.querySelector('body').insertAdjacentHTML('beforeend', '<div class="Cuteen_DarkSky"><div class="Cuteen_DarkPlanet"></div></div>'),
    setTimeout(function() {
    document.querySelector('body').classList.contains('DarkMode') ? (document.querySelector('body').classList.remove('DarkMode'), localStorage.setItem('isDark', '0'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')) : (document.querySelector('body').classList.add('DarkMode'), localStorage.setItem('isDark', '1'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')),
    setTimeout(function() {
    document.getElementsByClassName('Cuteen_DarkSky')[0].style.transition = 'opacity 3s';
    document.getElementsByClassName('Cuteen_DarkSky')[0].style.opacity = '0';
    setTimeout(function() {
    document.getElementsByClassName('Cuteen_DarkSky')[0].remove();
    }, 1e3);
    }, 2e3)
    })
    const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
    if (nowMode === 'light') {
    activateDarkMode()
    saveToLocal.set('theme', 'dark', 2)
    GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
    document.getElementById('modeicon').setAttribute('xlink:href', '#icon-sun')
    } else {
    activateLightMode()
    saveToLocal.set('theme', 'light', 2)
    document.querySelector('body').classList.add('DarkMode'), document.getElementById('modeicon').setAttribute('xlink:href', '#icon-moon')
    }
    // handle some cases
    typeof utterancesTheme === 'function' && utterancesTheme()
    typeof FB === 'object' && window.loadFBComment()
    window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
    }
    // 白天夜晚切换动画end


    + +

    引用 sun_moon.pug

    修改 [you_blog]\themes\butterfly\layout\includes\head.pug, 在文件末位增加以下代码:

    +
      //- global config
    !=partial('includes/head/config', {}, {cache: true})

    include ./head/config_site.pug
    include ./head/noscript.pug

    !=fragment_cache('injectHeadJs', function(){return inject_head_js()})

    !=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
    + include ./custom/sun_moon.pug

    + +

    替换昼夜切换按钮

    修改[you_blog]\themes\butterfly\layout\includes\rightside.pug, 替换原本的昼夜切换按钮

    +
      when 'translate'
    if translate.enable
    button#translateLink(type="button" title=_p('rightside.translate_title'))= translate.default
    when 'darkmode'
    if darkmode.enable && darkmode.button
    - button#darkmode(type="button" title=_p('rightside.night_mode_title'))
    - i.fas.fa-adjust
    + a.icon-V.hidden(onclick='switchNightMode()', title=_p('rightside.night_mode_title'))
    + svg(width='25', height='25', viewBox='0 0 1024 1024')
    + use#modeicon(xlink:href='#icon-moon')

    + +

    为博客添加波浪效果

    修改index.pug文件

    修改themes/butterfly/layout/includes/header/index.pug,在第 38 行左右

    +
    if top_img !== false
    if is_post()
    include ./post-info.pug
    + section.main-hero-waves-area.waves-area
    + svg.waves-svg(xmlns='http://www.w3.org/2000/svg', xlink='http://www.w3.org/1999/xlink', viewBox='0 24 150 28', preserveAspectRatio='none', shape-rendering='auto')
    + defs
    + path#gentle-wave(d='M -160 44 c 30 0 58 -18 88 -18 s 58 18 88 18 s 58 -18 88 -18 s 58 18 88 18 v 44 h -352 Z')
    + g.parallax
    + use(href='#gentle-wave', x='48', y='0')
    + use(href='#gentle-wave', x='48', y='3')
    + use(href='#gentle-wave', x='48', y='5')
    + use(href='#gentle-wave', x='48', y='7')
    #post-top-cover
    img#post-top-bg(class='nolazyload' src=bg_img)
    else if is_home()
    #site-info
    h1#site-title=site_title
    if theme.subtitle.enable

    + +

    添加css

    [blogRoot]/self/css/meihua.css,增加下面的代码

    +
    /* 波浪css */
    .main-hero-waves-area {
    width: 100%;
    position: absolute;
    left: 0;
    bottom: -11px;
    z-index: 5;
    }
    .waves-area .waves-svg {
    width: 100%;
    height: 5rem;
    }
    /* Animation */

    .parallax > use {
    animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
    }
    .parallax > use:nth-child(1) {
    animation-delay: -2s;
    animation-duration: 7s;
    fill: #f7f9febd;
    }
    .parallax > use:nth-child(2) {
    animation-delay: -3s;
    animation-duration: 10s;
    fill: #f7f9fe82;
    }
    .parallax > use:nth-child(3) {
    animation-delay: -4s;
    animation-duration: 13s;
    fill: #f7f9fe36;
    }
    .parallax > use:nth-child(4) {
    animation-delay: -5s;
    animation-duration: 20s;
    fill: #f7f9fe;
    }
    /* 黑色模式背景 */
    [data-theme="dark"] .parallax > use:nth-child(1) {
    animation-delay: -2s;
    animation-duration: 7s;
    fill: #18171dc8;
    }
    [data-theme="dark"] .parallax > use:nth-child(2) {
    animation-delay: -3s;
    animation-duration: 10s;
    fill: #18171d80;
    }
    [data-theme="dark"] .parallax > use:nth-child(3) {
    animation-delay: -4s;
    animation-duration: 13s;
    fill: #18171d3e;
    }
    [data-theme="dark"] .parallax > use:nth-child(4) {
    animation-delay: -5s;
    animation-duration: 20s;
    fill: #18171d;
    }

    @keyframes move-forever {
    0% {
    transform: translate3d(-90px, 0, 0);
    }
    100% {
    transform: translate3d(85px, 0, 0);
    }
    }
    /*Shrinking for mobile*/
    @media (max-width: 768px) {
    .waves-area .waves-svg {
    height: 40px;
    min-height: 40px;
    }
    }
    + +

    注意: 的是 css 中fill属性可以控制波浪颜色

    +

    页脚透明

    [blogRoot]/self/css/meihua.css,增加下面的代码

    +
    /* 页脚透明start */
    #footer {
    background: var(--icat-footer-background);
    }

    #footer #footer-wrap {
    color: var(--font-color)
    }

    #footer #footer-wrap a {
    color: var(--font-color)
    }

    /* 页脚透明end */
    + +

    文章页版权样式美化

    [blogRoot]/self/css/meihua.css,增加下面的代码

    +
    /* 版权样式调整start */
    #post .post-copyright {
    background: var(--icat-card-bg);
    padding: 1rem 1.3rem;
    overflow: hidden;
    border: var(--style-border);
    border-width: 1px;
    transition: 0.3s;
    position: relative;
    margin: 1.5rem 0px 0.5rem;
    border-radius: 8px;
    }
    #post .post-copyright:before {
    position: absolute;
    right: 22px;
    top: -77px;
    content: "\e039";
    font-size: 180px;
    font-family: "iconfont";
    color: var(--icat-fontcolor);
    opacity: 0.1;
    filter: blur(7px);
    }
    /* 版权样式调整end */
    + +

    分类页和标签页面添加Bar条

    +

    使用justlovesmile

    -
  6. -
-
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
356e32244966 mytest/ubuntu:3.5 "bash" 2 hours ago Up 2 hours elated_aryabhata
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker commit -m="vim cmd add ok" -a="ggls" 356e32244966 ggls/ubuntu:1.5
sha256:87e99e19eeef47d4f0daaffc8498690614e0d95eae60ef61b439abe97b62fd16
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ggls/ubuntu 1.5 87e99e19eeef 7 seconds ago 176MB
mytest/ubuntu 3.5 a92a27affdde 2 hours ago 72.8MB
tomcat 9.0 b8e65a4d736d 4 months ago 680MB
ubuntu latest ba6acccedd29 6 months ago 72.8MB
redis 6.0.8 16ecd2772934 18 months ago 104MB
[root@iZ8vbfaek3x3ogtpxnpnwfZ /]#
+

新增pug文件

新增categoryBar.pug文件

首先是分类条,在themes/butterfly/layout/includes/处新建文件categoryBar.pug

+
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("category")
a.category-bar-more(href="/categories/") 更多
+ +

新增tarsBar.pug文件

其次是标签条,在themes/butterfly/layout/includes/处新建文件tagBar.pug,因为样式一样,所以没有更改id和class名称。

+
#category-bar
.category-bar-items#category-bar-items
!=getarray_bar("tag")
a.category-bar-more(href="/tags/") 更多
+ +

新建Hexo辅助函数

theme/butterfly/scripts/helpers/中创建get_arrays.js

+
hexo.extend.helper.register('getarray_bar', function (types) {
if (!types) {
types = "category"
}
const categoriesBar = function (categories) {
if (!categories || !categories.length) return ``
const categoryArr = []
hexo.locals.get('categories').map(function (category) {
categoryArr.push({ name: category.name, value: category.length })
})
categoryArr.sort((a, b) => { return b.value - a.value })
let strCategoriesBar = ``
for (let i = 0; i < categories.length; i++) {
strTemp=`
<div class="category-bar-item" id="${categoryArr[i].name}">
<a href="/categories/${categoryArr[i].name}/">${categoryArr[i].name}</a>
</div>`
strCategoriesBar+=strTemp
}
return strCategoriesBar
}
const tagsBar = function(tags) {
if (!tags || !tags.length) return ``
const tagArr = []
hexo.locals.get('tags').map(function (tag) {
tagArr.push({ name: tag.name, value: tag.length })
})
tagArr.sort((a, b) => { return b.value - a.value })
let strTagsBar = ``
for (let i = 0; i < tags.length; i++) {
strTemp=`
<div class="category-bar-item" id="${tagArr[i].name}">
<a href="/tags/${tagArr[i].name}/">${tagArr[i].name}</a>
</div>`
strTagsBar+=strTemp
}
return strTagsBar
}
if (types == "category"){
return categoriesBar(this.site.categories)
}
if (types == "tag"){
return tagsBar(this.site.tags)
}
})
+ +

在页面引用模块

在分类页面引用:找到theme/butterfly/layout/category.pug

+
extends includes/layout.pug

block content
if theme.category_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts.category_ui
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#category
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-folder-open
+ include includes/categoryBar.pug
.article-sort-title= _p('page.category') + ' - ' + page.category
+articleSort(page.posts)
include includes/pagination.pug
+ +

在标签页引用:找到theme/butterfly/layout/tag.pug

+
extends includes/layout.pug

block content
if theme.tag_ui == 'index'
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#tag
+ .category-in-bar
+ .category-in-bar-tips
+ i.fa-fw.fas.fa-tags
+ include includes/tagBar.pug
.article-sort-title= _p('page.tag') + ' - ' + page.tag
+articleSort(page.posts)
include includes/pagination.pug
+ +

引入js和css文件

在自定义的js里面添加

+
// -----------分类条的js-----------
categoriesBarActive()
topCategoriesBarScroll()
tagsBarActive()

//分类条
function categoriesBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#category-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/categories\/.*?\//;
var patbool = pattern.test(urlinfo);
console.log(patbool);
// 获取当前的分类
if (patbool) {
var valuegroup = urlinfo.split("/");
console.log(valuegroup[2]);
// 获取当前分类
var nowCategorie = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowCategorie).classList.add("select");
}
}
}

}

//鼠标控制横向滚动
function topCategoriesBarScroll(){
if (document.getElementById("category-bar-items")){
let xscroll = document.getElementById("category-bar-items");
xscroll.addEventListener("mousewheel", function (e) {
//计算鼠标滚轮滚动的距离
let v = -e.wheelDelta / 2;
xscroll.scrollLeft += v;
//阻止浏览器默认方法
e.preventDefault();
}, false);
}
}

// -----------标签条的js-----------
//标签条
function tagsBarActive(){
var urlinfo = window.location.pathname;
urlinfo = decodeURIComponent(urlinfo)
//console.log(urlinfo);
//判断是否是首页
if (urlinfo == '/'){
if (document.querySelector('#tags-bar')){
document.getElementById('首页').classList.add("select")
}
}else {
// 验证是否是分类链接
var pattern = /\/tags\/.*?\//;
var patbool = pattern.test(urlinfo);
//console.log(patbool);
// 获取当前的标签
if (patbool) {
var valuegroup = urlinfo.split("/");
//console.log(valuegroup[2]);
// 获取当前分类
var nowTag = valuegroup[2];
if (document.querySelector('#category-bar')){
document.getElementById(nowTag).classList.add("select");
}
}
}
}
+ +

修改导航栏一闪的问题

+

使用的安知鱼

+
+

修改main.js

修改顶栏一闪而过的 bug 修改本地themes/butterfly/source/js/main.js

+
  window.scrollCollect = () => {
return btf.throttle(function (e) {
const currentTop = window.scrollY || document.documentElement.scrollTop
const isDown = scrollDirection(currentTop)
if (currentTop > 56) {
+ $header.classList.add('is-top-bar')
if (isDown) {
if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible')
if (isChatBtnShow && isChatShow === true) {
chatBtnHide()
isChatShow = false
}
} else {
if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible')
if (isChatBtnHide && isChatShow === false) {
chatBtnShow()
isChatShow = true
}
}
$header.classList.add('nav-fixed')
if (window.getComputedStyle($rightside).getPropertyValue('opacity') === '0') {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
} else {
if (currentTop === 0) {
- $header.classList.remove('nav-fixed', 'nav-visible')
+ $header.classList.remove('is-top-bar')
}
$rightside.style.cssText = "opacity: ''; transform: ''"
}

if (document.body.scrollHeight <= innerHeight) {
$rightside.style.cssText = 'opacity: 0.8; transform: translateX(-58px)'
}
}, 200)()
}
+ +

侧边栏最近文章梅花

修改index.pug布局

去除首页最近文章显示,改为文章页显示,修改themes/butterfly/layout/includes/widget/index.pug

+
else
//- page
!=partial('includes/widget/card_author', {}, {cache: true})
!=partial('includes/widget/card_announcement', {}, {cache: true})
!=partial('includes/widget/card_top_self', {}, {cache: true})

.sticky_layout
if showToc
include ./card_post_toc.pug

//- !=partial('includes/widget/card_recent_post', {}, {cache: true}) //- 注释掉最近文章

!=partial('includes/widget/card_ad', {}, {cache: true})
!=partial('includes/widget/card_newest_comment', {}, {cache: true})
!=partial('includes/widget/card_categories', {}, {cache: true})
!=partial('includes/widget/card_tags', {}, {cache: true})
+ +

添加css美化

#aside-content .aside-list > .aside-list-item .content > time {
display: none;
}
#aside-content .aside-list > .aside-list-item .content > .title {
-webkit-line-clamp: 3;
font-weight: 700;
padding: 2px 0;
}
#aside-content .aside-list > .aside-list-item {
padding: 8px;
padding-top: 6px !important;
padding-bottom: 6px !important;
border-radius: 12px;
transition: 0.3s;
margin: 4px 0;
cursor: pointer;
}
@media screen and (min-width: 1300px) {
#aside-content .aside-list > .aside-list-item:hover {
transform: scale(1.03);
}
#aside-content .aside-list > .aside-list-item:active {
transform: scale(0.97);
}
}
#aside-content .aside-list > .aside-list-item:hover .thumbnail > img {
transform: scale(1);
}
#aside-content .aside-list > .aside-list-item:not(:last-child) {
border-bottom: 0 dashed var(--anzhiyu-background) !important;
}
#aside-content .aside-list > .aside-list-item .thumbnail {
border-radius: 8px;
border: var(--style-border);
}
#aside-content .aside-list > .aside-list-item:hover {
background: var(--anzhiyu-blue-main);
color: var(--anzhiyu-white);
transition: 0.3s;
box-shadow: var(--anzhiyu-shadow-main);
}
#aside-content .aside-list > .aside-list-item:hover a {
color: var(--anzhiyu-white) !important;
}
.card-widget.card-recent-post {
padding: 0.4rem 0.6rem !important;
}
+

文章页H1-H6添加小风车

+

使用的安知鱼

+
+

修改主题配置文件

beautify:
enable: true
field: post # site/post
# title-prefix-icon: '\f0c1' 原内容
title-prefix-icon: '\f863'
title-prefix-icon-color: "#F47466"
+ +

让小风车转起来

在自定义 [blog]/source/self/css/custom.css 文件中,加入以下代码即可

+
/* 文章页H1-H6图标样式效果 */
h1::before,
h2::before,
h3::before,
h4::before,
h5::before,
h6::before {
-webkit-animation: ccc 1.6s linear infinite;
animation: ccc 1.6s linear infinite;
}
@-webkit-keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
@keyframes ccc {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn);
}
}
+ +

小风车的颜色和大小

修改小风车的颜色和大小,加入下面的代码

+
#content-inner.layout h1::before {
color: #ef50a8;
margin-left: -1.55rem;
font-size: 1.3rem;
margin-top: -0.23rem;
}
#content-inner.layout h2::before {
color: #fb7061;
margin-left: -1.35rem;
font-size: 1.1rem;
margin-top: -0.12rem;
}
#content-inner.layout h3::before {
color: #ffbf00;
margin-left: -1.22rem;
font-size: 0.95rem;
margin-top: -0.09rem;
}
#content-inner.layout h4::before {
color: #a9e000;
margin-left: -1.05rem;
font-size: 0.8rem;
margin-top: -0.09rem;
}
#content-inner.layout h5::before {
color: #57c850;
margin-left: -0.9rem;
font-size: 0.7rem;
margin-top: 0rem;
}
#content-inner.layout h6::before {
color: #5ec1e0;
margin-left: -0.9rem;
font-size: 0.66rem;
margin-top: 0rem;
}
+ +

小风车hover效果

设置鼠标碰到标题时,小风车跟随标题变色,且像是被光标阻碍了,转速变慢。鼠标离开恢复转速。也可以设置为 none 鼠标碰到停止转动。

+
#content-inner.layout h1:hover,
#content-inner.layout h2:hover,
#content-inner.layout h3:hover,
#content-inner.layout h4:hover,
#content-inner.layout h5:hover,
#content-inner.layout h6:hover {
color: #3b70fc;
}
#content-inner.layout h1:hover::before,
#content-inner.layout h2:hover::before,
#content-inner.layout h3:hover::before,
#content-inner.layout h4:hover::before,
#content-inner.layout h5:hover::before,
#content-inner.layout h6:hover::before {
color: #3b70fc;
-webkit-animation: ccc 3.2s linear infinite;
animation: ccc 3.2s linear infinite;
}
+ +

右下角设置 icon 转的太快了,让它慢一点吧。继续添加:

+
/* 页面设置icon转动速度调整 */
#rightside_config i.fas.fa-cog.fa-spin {
animation: fa-spin 5s linear infinite;
}
+ +

文章加密

安装插件

通过插件,实现文章输入密码才能浏览

+
npm install hexo-blog-encrypt --save
+ +

修改文章

在文章头部加入

+
---
title: 加密文章测试,输入test即可查看
password: test
message: 测试加密,这里的密码是:test
---
+ +

文章增加最新文章标识

+

转载于云端

+
+

修改page.js

在js文件里面添加一段js

+
// 最新文章
hexo.extend.helper.register('newPost', function() {
let name, time;
hexo.locals.get('posts').map((item, index) => {
if (index == 0) name = item.title, time = item.date
else if (item.date > time) { name = item.title, time = item.date }
});
return name
})
+ +

修改post-ui.pug

themes\butterfly\layout\includes\mixins\post-ui.pug 添加代码

+
mixin postUI(posts)
+ - let newTitle= newPost()
each article , index in page.posts.data
.recent-post-item
-
let link = article.link || article.path
let title = article.title || _p('no_title')
const position = theme.cover.position
let leftOrRight = position === 'both'
? index%2 == 0 ? 'left' : 'right'
: position === 'left' ? 'left' : 'right'
let post_cover = article.cover
let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : ''
-
if post_cover && theme.cover.index_enable
.post_cover(class=leftOrRight)
a(href=url_for(link) title=title)
img.post_bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
+ if newTitle == title
+ span(class=`newPost-${leftOrRight=='left'?'right':'left'}`) 最新
+ +

添加自定义CSS

#recent-posts>.recent-post-item {
position: relative;
}

/* 最新文章图标 */
.newPost-left,
.newPost-right {
position: absolute;
top: 0;
color: white;
padding: 0 15px;
background-color: #49b1f5;
border-radius: 0 0 10px 10px;
}

.newPost-left {
left: 15px;
}

.newPost-right {
right: 15px;
}
+ +

hexo加速

+

使用[akilar](使用gulp压缩博客静态资源 | Akilarの糖果屋)教程

+
+

安装Gulp插件

在博客根目录[Blogroot]打开终端,输入:

+
npm install --global gulp-cli #全局安装gulp指令集
npm install gulp --save #安装gulp插件
+ +

安装各个下属插件以实现对各类静态资源的压缩

    +
  • 压缩HTML:
  • +
+
npm install gulp-htmlclean --save-dev
npm install gulp-html-minifier-terser --save-dev
# 用gulp-html-minifier-terser可以压缩HTML中的ES6语法
+ +
    +
  • 压缩CSS:
  • +
+
npm install gulp-clean-css --save-dev
+ +
    +
  • 压缩JS:
  • +
+
npm install gulp-terser --save-dev
+ +
    +
  • 压缩字体包:
  • +
+
npm install gulp-fontmin --save-dev
+ +

为Gulp创建gulpfile.js任务脚本

在博客根目录[Blogroot]下新建gulpfile.js,打开[Blogroot]\gulpfile.js,输入以下内容:

+
//用到的各个插件
var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var fontmin = require('gulp-fontmin');
// gulp-tester
var terser = require('gulp-terser');
// 压缩js
gulp.task('compress', async() =>{
gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(terser())
.pipe(gulp.dest('./public'))
});
//压缩css
gulp.task('minify-css', () => {
return gulp.src(['./public/**/*.css'])
.pipe(cleanCSS({
compatibility: 'ie11'
}))
.pipe(gulp.dest('./public'));
});
//压缩html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true, //清除html注释
collapseWhitespace: true, //压缩html
collapseBooleanAttributes: true,
//省略布尔属性的值,例如:<input checked="true"/> ==> <input />
removeEmptyAttributes: true,
//删除所有空格作属性值,例如:<input id="" /> ==> <input />
removeScriptTypeAttributes: true,
//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,
//删除<style>和<link>的 type="text/css"
minifyJS: true, //压缩页面 JS
minifyCSS: true, //压缩页面 CSS
minifyURLs: true //压缩页面URL
}))
.pipe(gulp.dest('./public'))
});
//压缩字体
function minifyFont(text, cb) {
gulp
.src('./public/fonts/*.ttf') //原字体所在目录
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest('./public/fontsdest/')) //压缩后的输出目录
.on('end', cb);
}

gulp.task('mini-font', (cb) => {
var buffers = [];
gulp
.src(['./public/**/*.html']) //HTML文件所在目录请根据自身情况修改
.on('data', function(file) {
buffers.push(file.contents);
})
.on('end', function() {
var text = Buffer.concat(buffers).toString('utf-8');
minifyFont(text, cb);
});
});
// 运行gulp命令时依次执行以下任务
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html','mini-font'
#))
+ +
+

在每次运行完hexo generate生成静态页面后,运行gulp对其进行压缩。指令流程如下:

+
+
hexo clean
hexo generate
gulp
hexo server 或 hexo deploy
+ +

手机端悬浮窗

+

使用akilar教程

+
+

新建[Blogroot]\themes\butterfly\source\js\custom\fixed_card_widget.js,用来控制显隐逻辑

+
// 固定卡片点击动作
function FixedCardWidget(type,name,index){
// 根据id或class选择元素
if (type === "id"){
var tempcard = document.getElementById(name);
}
else{
var tempcard = document.getElementsByClassName(name)[index];
}
// 若元素存在
if (tempcard) {
// 首先判断是否存在fixed-card-widget类
if (tempcard.className.indexOf('fixed-card-widget') > -1){
// 存在则移除
RemoveFixedCardWidget();
}
else{
// 不存在则先初始化防止卡片叠加
RemoveFixedCardWidget();
//新建退出蒙版
CreateQuitBox();
// 再添加固定卡片样式
tempcard.classList.add('fixed-card-widget');
}
}
}
//创建一个蒙版,作为退出键使用
function CreateQuitBox(){
var quitBox = `<div id="quit-box" onclick="RemoveFixedCardWidget()"></div>`
var asideContent = document.getElementById('aside-content');
asideContent.insertAdjacentHTML("beforebegin",quitBox)
}
// 移除卡片方法
function RemoveFixedCardWidget(){
var activedItems = document.querySelectorAll('.fixed-card-widget');
if (activedItems) {
for (i = 0; i < activedItems.length; i++) {
activedItems[i].classList.remove('fixed-card-widget');
}
}
//移除退出蒙版
var quitBox = document.getElementById('quit-box');
if (quitBox) quitBox.remove();
}
// 常规先初始化,确保切换页面后不会有固定卡片留存
RemoveFixedCardWidget()

+ +

新建[Blogroot]\themes\butterfly\source\css\_layout\fixed_card_widget.styl,此处使用stylus交给插件编译,能够更快捷的适配多种内核样式

+
// 垂直居中卡片样式(排除toc目录卡片)
.fixed-card-widget
&:not(#card-toc)
visibility visible!important
display block!important
position fixed!important
bottom 0
left 0
top 0
right 0
margin auto
margin-bottom auto!important
margin-top auto!important
max-width 300px
max-height 500px
width auto
height auto
overflow-y: scroll
z-index 999
animation rotateX 0.5s ease
animation-fill-mode forwards
&::-webkit-scrollbar
width: 0
// 针对说说卡片做样式兼容适配
.card-shuo
&.fixed-card-widget
#artitalk_main
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
#operare_artitalk
.c2
z-index 1000
// 针对标签卡片做样式兼容适配
.card-tags
&.fixed-card-widget
.card-tag-cloud
max-height 460px
overflow scroll
&::-webkit-scrollbar
display: none
// 控制手机端可见
@media screen and (max-width: 768px)
div#fixedcard-dashboard
display flex!important
// 侧栏悬浮按钮样式
div#fixedcard-dashboard
position fixed
top 150px
width fit-content
height 40px
opacity 0.3
transition all 0.5s
display none
background rgba(255,255,255,0.9)
padding 5px 10px
border-top-right-radius 20px
border-bottom-right-radius 20px
z-index 1000
&:hover
opacity 1
button
&.fixedcard-activebtn
width 30px
opacity 1
pointer-events all
// 按钮样式
button
&.fixedcard-activebtn
width 0px
height 30px
transition all .5s
display flex
opacity 0
align-items center
justify-content space-around
pointer-events none
color #757273
// 悬浮按钮头像
.fixedcard-user-avatar
display inline-block
img
&.fixedcard-user-avatar-img
width 30px
height 30px
border-radius 50%
// 悬浮按钮夜间模式适配
[data-theme="dark"]
div#fixedcard-dashboard
background rgba(55,55,55,0.9)
button
&.fixedcard-activebtn
color #bcbdbd

// 卡片开启动画效果
@keyframes rotateX
from
transform rotateX(90deg)
to
transform rotateX(0deg)
// 退出蒙版效果
div#quit-box
position fixed
display block
left 0
top 0
width 100vh
height 100vh
z-index 99
background rgba(25,25,25,0.3)


[data-theme="dark"]
div#quit-box
background rgba(147, 146, 128, 0.3)

+ +

新建[Blogroot]\themes\butterfly\layout\includes\custom\fixed_card_widget.pug,以后的源码魔改教程都会尽量将改动文件归纳到带custom字样的文件夹里,便于管理魔改文件。

+
#fixedcard-dashboard
if is_post()
each poitem in theme.fixed_card_widget.post
button.fixedcard-activebtn(type="button" title=poitem.title onclick=`FixedCardWidget("` + poitem.type + `","` + poitem.name + `","` + poitem.index + `")`)
i(class=poitem.icon)
else
each paitem in theme.fixed_card_widget.page
button.fixedcard-activebtn(type="button" title=paitem.title onclick=`FixedCardWidget("` + paitem.type + `","` + paitem.name + `","` + paitem.index + `")`)
i(class=paitem.icon)
.fixedcard-user-avatar.fixedcard-activebtn(onclick="RemoveFixedCardWidget()")
img.fixedcard-user-avatar-img(src=url_for(theme.avatar.img) title=config.author)

+ +

修改[Blogroot]\themes\butterfly\layout\includes\additional-js.pug,直接加在文件末尾即可,但是注意缩进!

+
  if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async data-pjax src=url_for(theme.CDN.busuanzi))
+ if !theme.aside.mobile && theme.fixed_card_widget.enable
+ include ./custom/fixed_card_widget.pug
+ +

因为还做了page和post页面不同悬浮按钮的配置,为了让它能够自动切换而不是惰性加载,需要修改[Blogroot]\themes\butterfly\layout\includes\third-party\pjax.pug大约第十四行的位置,在pjax选择器中加入悬浮按钮的id。

+
  script.
let pjaxSelectors = [
'title',
'#config-diff',
'#body-wrap',
'#rightside-config-hide',
'#rightside-config-show',
+ "#fixedcard-dashboard",
'.js-pjax'
]
+ +

修改[Blogroot]\_config.butterfly.yml,新增配置项,此处的选择器其实就是提取了document.getElementsByClassName("name")[index]document.getElementById("name")这两个方法中的参数来确保能够找到侧栏卡片。原本其实是可以做成自动根据侧栏生成的,但是考虑到还有插件挂载和自定义卡片,以及还有部分用户会刻意隐藏一些侧栏卡片,所以干脆还是让用户自己去配置想要加到菜单的卡片好了。
找id或者class的办法很简单,用F12开启控制台,用左上角的元素选择器点选想要的侧栏卡片,在源码栏找到对应的class或者id。因为class是可以重名的,所以还存在一个序列问题,从0开始计数。此处为了避免语意混乱,建议还是用特征明显的class或者id来选择对应卡片。

+
#侧栏悬浮卡片控制按钮
#https://akilar.top/posts/451ac5f8/
fixed_card_widget:
enable: true
page: #页面显示按钮
- type: class #侧栏卡片选择器类型
name: card-info #侧栏卡片选择器名称
index: 0 #侧栏卡片选择器序列
icon: fas fa-address-book #图标
title: 用户信息 #悬停显示提示
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-shuo
index: 0
icon: fas fa-comments
title: 碎碎念
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
- type: id
name: card-newest-comments
index: 0
icon: fas fa-comment-dots
title: 最新评论
- type: class
name: card-tags
index: 0
icon: fas fa-tags
title: 标签
- type: class
name: card-webinfo
index: 0
icon: fas fa-chart-line
title: 网站咨询
post: #文章页显示按钮
- type: class
name: card-info
index: 0
icon: fas fa-address-book
title: 用户信息
- type: class
name: card-clock
index: 0
icon: fas fa-cloud-sun
title: 电子钟
- type: class
name: card-recent-post
index: 0
icon: fas fa-history
title: 最新文章
+ +

修改[Blogroot]_config.butterfly.yml的inject配置项

+
 inject:
head:

bottom:
+ - <script data-pjax defer src="/js/custom/fixed_card_widget.js"></script>
+ +

注意要关闭手机端显示侧栏卡片才能启用fixed卡片样式。

+
  aside:
enable: true
hide: false
button: true
- mobile: true # display on mobile
+ mobile: false # display on mobile
position: right # left or right
+ +

设置弹窗

+

这个功能使用的注:这个魔改使用了Ariasakaの小窝Leonus的教程

+
+

新建setting.pug文件

+

[blogRoot]/themes\acryple\layout\includes\setting.pug

+
html
body
#settingWindow.js-pjax
span.setting-title
span#stt 控制面板
a(id="close-console" onclick="toggleWinbox();") ×
button#backer(onclick='$(\'.asetting\').hide();$(\'.settingx\').show();$(\'#backer\').hide()')
i.fa.fa-chevron-left
span 返回
.settings
#setting-buttons
button.settingx(onclick='$(\'#theme-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fas.fa-layer-group
span 外观
button.settingx(onclick='$(\'#font-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-font
span 字体
button.settingx(onclick='$(\'#background-settings\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.far.fa-image
span 背景
button.settingx(onclick='$(\'#con-echarts\').show();$(\'.settingx\').hide();$(\'#backer\').show();var evt = document.createEvent("HTMLEvents");evt.initEvent("resize", false, false);window.dispatchEvent(evt);')
i.fas.fa-chart-pie
span 统计
button.settingx(onclick='$(\'#con-abouts\').show();$(\'.settingx\').hide();$(\'#backer\').show();')
i.fa.fa-cloud-download
span 关于
#setting-hides
#theme-settings.asetting
h2.content-head 性能设置
p
.content(style='display:flex')
input#blur(type='checkbox', onclick='setBlur()')
.content-text 禁用模糊效果
//- .content(style='display:flex')
//- input#yjjs(type='checkbox', onclick='yjjs1()')
//- .content-text 硬件加速
.content(style='display:flex')
input#fpson(type='checkbox', onclick='fpssw()' style="flex-shrink: 0")
.content-text
span 开启帧率检测(
a(href='javascript:window.location.reload()') 刷新
span 后生效)
p
h2.content-head 主题设置
//- .content(style='display:flex')
//- input#hideAside(type='checkbox', onclick='toggleRightside()')
//- .content-text 隐藏侧边栏
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleAplayer()')
.content-text 显示aplayer
.content(style='display:flex')
input#hideSakura(type='checkbox', onclick='toggleSakuras()')
.content-text 落樱特效
.content(style='display:flex')
input#autoTheme(type='checkbox', onclick='toggleAutoTheme()')
.content-text 明暗模式自动切换
.content(style='display:flex')
input#autoColor(type='checkbox', onclick='autoColor()')
.content-text 自动主题色(跟随文章封面)
| 未完工
.content(style='display:flex')
input#hideAplayer(type='checkbox', onclick='toggleNav()')
.content-text 固定导航栏
| ###
.content(style='display:flex')
button.content-button(onclick='switchTheme()') 切换主题

p
h3.content-head 主题色
#themeColorSettings.content(style='display:flex')
input#red(type='radio', name='colors', onclick='setColor(\'red\')')
input#orange(type='radio', name='colors', onclick='setColor(\'orange\')')
input#yellow(type='radio', name='colors', onclick='setColor(\'yellow\')')
input#green(type='radio', name='colors', onclick='setColor(\'green\')')
input#blue(type='radio', name='colors', onclick='setColor(\'blue\')')
input#heoblue(type='radio', name='colors', onclick='setColor(\'heoblue\')')
input#darkblue(type='radio', name='colors', onclick='setColor(\'darkblue\')')
input#purple(type='radio', name='colors', onclick='setColor(\'purple\')')
input#pink(type='radio', name='colors', onclick='setColor(\'pink\')', checked)
input#black(type='radio', name='colors', onclick='setColor(\'black\')')
input#blackgray(type='radio', name='colors', onclick='setColor(\'blackgray\')')
#font-settings.asetting
h2.content-head 字体设置
p#swfs
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYTMR\'!important;color:black', onclick='setFont(\'HYTMR\')') 汉仪唐美人
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'HYPailou\'!important;color:black', onclick='setFont(\'HYPailou\')') 汉仪新蒂牌楼
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXJLJ\'!important;color:black', onclick='setFont(\'FZXJLJ\')') 方正金陵体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZXS\'!important;color:black', onclick='setFont(\'FZXS\')') 方正像素体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'ZhuZiAWan\'!important;color:black', onclick='setFont(\'ZhuZiAWan\')') 筑紫A丸ゴシック
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'FZODZK\'!important;color:black', onclick='setFont(\'FZODZK\')') 方正欧蝶正楷
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Serif\'!important;color:black', onclick='setFont(\'Source Serif\')') 思源宋体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:\'Source Sans\'!important;color:black', onclick='setFont(\'Source Sans\')') 思源黑体
br
a.swf(href='javascript:;', rel='noopener external nofollow', style='font-family:-apple-system, IBM Plex Mono ,monosapce,\'微软雅黑\', sans-serif;', onclick='setFont(\'main\')') 系统默认
br
#background-settings.asetting
h2(style='margin-left:10px') 背景设置
div
span 注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效
button.content-button(onclick='localStorage.removeItem(\'blogbg\');location.reload();')
i.fa-solid.fa-arrows-rotate
span 点我恢复默认背景
button.content-button(onclick='switchTheme()') 切换主题
h3 图片(手机)
.bgbox
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4d539a5.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d4e15c9d.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6f22c03c6.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d56c83eb.webp)\')')
a.pimgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d50b439b.webp)\')')
h3 图片(电脑)
.bgbox
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5574d0e.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d529adf9.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d6d5159b31.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d718bbeef6.webp)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f237d19.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72f2032c8.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2021/12/01/7792ff0082ec4.jpg)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ee6d4f3.png)\')')
a.imgbox(href='javascript:;', rel='noopener external nofollow', style='background-image:url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)', onclick='changeBg(\'url(https://bu.dusays.com/2022/08/30/630d72ed76532.jpg)\')')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aea549be6.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aea549be6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aec701a68.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aec701a68.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324aef4a5543.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324aef4a5543.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/09/17/6324af3622884.webp)\')')
img(src='https://bu.dusays.com/2022/09/17/6324af3622884.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/5.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/6.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/7.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://bu.dusays.com/2022/12/08/6391b77ed767c.png)\')')
img(src='https://bu.dusays.com/2022/12/08/6391b77ed767c.png')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/9.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/10.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/11.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/12.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/13.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/14.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/15.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/16.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/17.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/18.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/19.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/20.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/21.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/22.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/23.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/24.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/25.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/26.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/27.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/28.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/29.webp')
a.imgbox(href='javascript:;', onclick='changeBg(\'url(https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp)\')')
img(src='https://cdn.afdelivr.top/npm/saiodgm-api@1.0.1/randomimg-my/30.webp')
h3 渐变色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #B7D31E, #42CE1E)', onclick='changeBg(\'linear-gradient(to right, #B7D31E, #42CE1E)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #06DE86, #06A5DE)', onclick='changeBg(\'linear-gradient(to right, #06DE86, #06A5DE)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #189BC4, #183DC4)', onclick='changeBg(\'linear-gradient(to right, #189BC4, #183DC4)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #C018C4, #C41818)', onclick='changeBg(\'linear-gradient(to right, #C018C4, #C41818)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #8B00BB, #030094)', onclick='changeBg(\'linear-gradient(to right, #8B00BB, #030094)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(to right, #eecda3, #ef629f)', onclick='changeBg(\'linear-gradient(to right, #eecda3, #ef629f)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)', onclick='changeBg(\'linear-gradient(90deg, #ffd7e4 0%, #c8f1ff 100%)\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)', onclick='changeBg(\'linear-gradient(45deg, #e5737b, #c6999e, #96b9c2, #00d6e8)\')')
h3 纯色
.bgbox
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #7D9D9C', onclick='changeBg(\'#7D9D9C\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #fff', onclick='changeBg(\'#fff\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #49A6E9', onclick='changeBg(\'#49A6E9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #F7CEFF', onclick='changeBg(\'#F7CEFF\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #FFFFCE', onclick='changeBg(\'#FFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #CFFFCE', onclick='changeBg(\'#CFFFCE\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #17EFE9', onclick='changeBg(\'#17EFE9\')')
a.box(href='javascript:;', rel='noopener external nofollow', style='background: #9F17EF', onclick='changeBg(\'#9F17EF\')')
#con-echarts.asetting
h1 文章统计
h2 监控
iframe(src="https://status.yisous.xyz" width="100%" height="500px" frameborder="no")
if !is_page()
h2 文章统计
script(src="https://npm.elemecdn.com/echarts@4.9.0/dist/echarts.min.js")
div(id="posts-chart" data-start="2021-01" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="tags-chart" data-length="10" style="border-radius: 8px; height: 300px; padding: 10px;")
div(id="categories-chart" data-parent="true" style="border-radius: 8px; height: 300px; padding: 10px;")
h2 访问统计
| 显示不出来请刷新页面
//-下面换成自己的51la统计

#con-abouts.asetting
h1 关于
| Hexo-theme-Acryple v1.0.100
br
| Ariasaka Console v0.01
br
| 欢迎
a(href="/messageboard")
| 反馈!
#setting-sidesl
button(title="恢复默认设置" class="reSettings con-rightside")
i.fa.fa-repeat
#setting-sides
button(title="繁简转换" class="con-rightside" id="con-translate" onclick="javascript:rmf.translate();")
i.iconfont.icon-fanti
button(title="昼夜切换" class="con-rightside" id="con-mode" onclick="switchDarkMode();")
i.fa.fa-adjust
if is_post()||is_page()
button(title="阅读模式" class="con-rightside" id="con-reading" onclick="rmf.switchReadMode();")
i.fa.fa-book-open
if !is_page()
button(title="单双栏切换" class="con-rightside" id="con-toggleaside" onclick="toggleAside();")
i.fas.fa-arrows-alt-h
if !is_page()
button(title="左右栏切换" class="con-rightside" id="con-toggleleftaside" onclick="switchAside();")
i.fas.fa-binoculars
if is_post()||is_page()
button(title="开关弹幕" class="con-rightside" id="con-barrage" onclick="switchCommentBarrage();")
i.iconfont.icon-danmu
button(title="全屏" class="con-rightside" id="con-fullscreen" onclick="fullScreen();")
i.fas.fa-expand

+ +

js部分

+
document.addEventListener('pjax:complete', tosetting);
document.addEventListener('DOMContentLoaded', tosetting);
function tosetting(){
$("#settingWindow").hide();
if(localStorage.getItem("blur")=="false"){
blur=0;
}else{
blur=1;

}
if(localStorage.getItem("yjjs")=="true"){
yjjs=1;
}else{
yjjs=0;

}
if(localStorage.getItem("fpson")==undefined){
localStorage.setItem("fpson","1");
}
if(!blur){
document.getElementById("settingStyle").innerText=`
*,*:not(.card-info)::before,*::after{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
setBlur=function(){
blur=!blur;
localStorage.setItem("blur",blur);
if(!blur){
document.getElementById("settingStyle").innerText=`
*{
-webkit-backdrop-filter: none!important;
backdrop-filter: none!important;
-webkit-filter: none!important;
filter: none!important;
}`}
else{
document.getElementById("settingStyle").innerText=''
}
}
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
yjjs1=function(){
yjjs=!yjjs;
localStorage.setItem("yjjs",yjjs)
// if(yjjs){
// document.getElementById("yjjs").innerText=`
// *:not(#web_bg){
// transform:translateZ(0);
// backface-visibility: hidden
// }`}
// else{
// document.getElementById("yjjs").innerText=``
// }
}
if(localStorage.getItem("blogTheme")=="acrylic"){
document.getElementById("css").href="";
}
switchTheme=function(){
if(document.getElementById("css").href==window.location.protocol+"//"+window.location.host+"/css/stylessimple.css"){
document.getElementById("css").href=""
localStorage.setItem("blogTheme","acrylic");
}else{
document.getElementById("css").href="/css/stylessimple.css"
localStorage.setItem("blogTheme","simple");
}
}
setColor=function(c){
document.getElementById("themeColor").innerText=`:root{--lyx-theme:var(--lyx-${c})!important}`;
localStorage.setItem("themeColor",c);

}
setFont=function(n){
localStorage.setItem("font",n);
if(n=="main"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else if(n=="HYPailou"){
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="Fredoka,HYPailou,KyoukashoProL,-apple-system, IBM Plex Mono ,monospace,'微软雅黑', sans-serif"
}
}
else{
var s=document.querySelectorAll("body,.aplayer")
for(var i = 0; i <s.length; i++) {
s[i].style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,\"微软雅黑\", sans-serif"
}
document.body.style.fontFamily="var(--global-font),KyoukashoProL,-apple-system, IBM Plex Mono ,monosapce,'微软雅黑', sans-serif"
document.documentElement.style.setProperty('--global-font', n)
}
}
if(localStorage.getItem("themeColor")==undefined){
localStorage.setItem("themeColor","pink");
}

setColor(localStorage.getItem("themeColor"));



if(localStorage.getItem("hideRightside")==undefined){
localStorage.setItem("hideRightside","0");
}

if(localStorage.getItem("hideRightside")=="1"){
$("#rightside").toggle()
}
toggleRightside=function(){
$("#rightside").toggle();
localStorage.setItem("hideRightside",Math.abs(Number(localStorage.getItem("hideRightside"))-1))
}
if(localStorage.getItem("font")==undefined){
localStorage.setItem("font","HYTMR")
}
setFont(localStorage.getItem("font"))
// 存数据
// name:命名 data:数据
saveData=function(name, data) {
localStorage.setItem(name, JSON.stringify({ 'time': Date.now(), 'data': data }))
}

// 取数据
// name:命名 time:过期时长,单位分钟,如传入30,即加载数据时如果超出30分钟返回0,否则返回数据
loadData=function(name, time) {
let d = JSON.parse(localStorage.getItem(name));
// 过期或有错误返回 0 否则返回数据
if (d) {
let t = Date.now() - d.time
if (t < (time * 60 * 1000) && t > -1) return d.data;
}
return 0;
}
// 切换背景函数
// 此处的flag是为了每次读取时都重新存储一次,导致过期时间不稳定
// 如果flag为0则存储,即设置背景. 为1则不存储,即每次加载自动读取背景.
changeBg=function(s, flag) {
let bg = document.getElementById('web_bg')
if (s.charAt(0) == '#') {
bg.style.backgroundColor = s
bg.style.backgroundImage = 'none'
} else bg.style.backgroundImage = s
if (!flag) { saveData('blogbg', s) }
}
// 上面两个函数如果你有其他需要存取数据的功能,也可以直接使用

// 读取背景
try {
let data = loadData('blogbg', 1440)
if (data) changeBg(data, 1)
else localStorage.removeItem('blogbg');
} catch (error) { localStorage.removeItem('blogbg'); }



fpssw=function(){
if(localStorage.getItem("fpson")=="1"){
localStorage.setItem("fpson","0");
}else{
localStorage.setItem("fpson","1");
}
}
$(".asetting").hide();
$('#backer').hide();
$("#"+localStorage.getItem("themeColor")).attr("checked", true);
if(localStorage.getItem("blur")=="false"){
document.getElementById("blur").checked=true;
}
if(localStorage.getItem("yjjs")=="true"){
document.getElementById("yjjs").checked=true;
}
if(localStorage.getItem("fpson")=="1"){
document.getElementById("fpson").checked=true;
}


if(localStorage.getItem("sakurahide")=="false"){
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else if(localStorage.getItem("sakurahide")==null){
localStorage.setItem("sakurahide","false");
document.getElementById("hideSakura").checked=true;
isSakura=1;
}
else{
setTimeout(
stopp,1000);
isSakura=0;
}
if(localStorage.getItem("aplayerhide")=="false"){
document.getElementById("hideAplayer").checked=true;
}
else if(localStorage.getItem("aplayerhide")==null){
localStorage.setItem("aplayerhide","false");
document.getElementById("hideAplayer").checked=true;
}
else{
doStuff=function() {
flag=0;
try{
ap=aplayers[0];
ap.list;
flag=1;
}catch{
setTimeout(doStuff, 50);
return;
}
if(flag){
$(".aplayer-fixed").hide()
}
}
doStuff();

}

document.getElementsByClassName("reSettings")[0].onclick=function(){
localStorage.clear()
window.location.reload()
}

toggleWinbox=function(){
$("#settingWindow").fadeToggle();
if(document.getElementById("settingWindow").style.display!="none"){
document.getElementById("settingWindow").style.display="flex";
}
}
fullScreen=function() {
if (document.fullscreenElement) document.exitFullscreen()
else document.documentElement.requestFullscreen();
}
toggleAside=function(){
const $htmlDom = document.documentElement.classList
$htmlDom.contains('hide-aside')
? saveToLocal.set('aside-status', 'show', 2)
: saveToLocal.set('aside-status', 'hide', 2)
$htmlDom.toggle('hide-aside')
}
toggleAplayer=function(){
$(".aplayer-fixed").toggle()
if(localStorage.getItem("aplayerhide")=="true"){
localStorage.setItem("aplayerhide",false);
}
else{
localStorage.setItem("aplayerhide",true);
}
}
// position = $(window).scrollTop();
// $(window).scroll(function () {

// scroll = $(window).scrollTop();

// if (scroll > position) {
// document.getElementsByTagName("header")[0].style.transform="translateY(58px)";
// } else {


// document.getElementsByTagName("header")[0].style.transform="";

// }

// position = scroll;
// });
toggleSakuras=function(){
isSakura=!isSakura;
stopp(isSakura);
if(localStorage.getItem("sakurahide")=="true"){
localStorage.setItem("sakurahide",false);
}
else{
localStorage.setItem("sakurahide",true);
}
}
switchAside=function(){
if(left){
document.getElementById("aside-content").classList.add("right");
document.querySelector(".layout > div:first-child").classList.add("left");
localStorage.setItem("leftAside","false");
}
else{
document.getElementById("aside-content").className="aside-content";
document.querySelector(".layout > div:first-child").className="";
try{
document.querySelector("#recent-posts").className="recent-posts";
}catch(err){}localStorage.setItem("leftAside","true");}
left=!left;
}
left=1;
if(localStorage.getItem("leftAside")=="true"||localStorage.getItem("leftAside")==null){

}else{
switchAside();
}
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
document.getElementById("autoTheme").checked=true;
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
}
if(location.href.indexOf('posts')!=-1){
var xhr = new XMLHttpRequest();
var url = document.querySelector('#page-header').style.backgroundImage.split('url("')[1].split('")')[0];
xhr.open("GET","https://apis.yisous.xyz/api/imageColor?imgurl="+url, true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState===4) {
if(xhr.status===200) {
document.getElementById("themeColor").innerText=`:root{--lyx-theme:${xhr.responseText}!important}`;
}
}
}
}
toggleAutoTheme=()=>{
if(localStorage.getItem("autoTheme")=="true"){
localStorage.setItem("autoTheme","false");
$("#con-mode").show();
}
else{
localStorage.setItem("autoTheme","true");
var time=new Date();
if(time.getHours()<=7||time.getHours()>=19){
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
}
else{
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
$("#con-mode").hide();
}
}
}
switchDarkMode = function () {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
// handle some cases
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
};
+ +

新建css

+
/*使用了Chrome105新特性has,兼容性不好qwq*/
.con-rightside{
height:50px!important;
width: 50px!important;
border-radius: 30px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
margin:10px;
transition: all .3s;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
.con-rightside i::before{
font-size:30px;
}
[data-theme="dark"] .con-rightside i::before{
color:white
}
.con-rightside:hover{
background-color: rgba(129, 129, 129, 0.568);
}
@media screen and (max-width:600px){
.con-rightside i::before{
font-size: 16px;
}
.con-rightside{
height:20px!important;
width:20px!important;
}
}
@media screen and (max-width:768px){
#con-barrage{
display: none!important;
}
}
#setting-buttons{
display: flex;
flex-wrap: wrap;
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#setting-sides{
margin-left: auto;
}
#setting-sides{
white-space: nowrap;
}
#setting-sidesl{
display: flex;
}
.settings .content{
margin-left:20px;
}
.settings{
margin:15px
}
/* 开关 */
.settings input[type="checkbox"] {
width: 38px;
height: 20px;
position: relative;
border: 1px solid #000000;
background-color: #0000;
border-radius: 12px;
background-clip: content-box;
display: inline-block;
-webkit-appearance: none;
user-select: none;
outline: none;
transform: translateY(5px);}
[data-theme="dark"] .settings input[type="checkbox"] {
border: 1px solid white;
}
.settings input[type="checkbox"]:before {
content: '';
width: 12px;
height: 12px;
position: absolute;
top: 3px;
left: 5px;
border-radius: 10px;
background-color: #000;}
[data-theme="dark"] .settings input[type="checkbox"]:before{
background-color: white;
}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);border-color:var(--lyx-theme)}
.settings input[type="checkbox"]:checked:before {
left: 19px;background-color: white!important;}

.settings input[type="checkbox"] {
transition: border background-color box-shadow }
.settings input[type="checkbox"]:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked {
background-color: var(--lyx-theme);
/* transition: border ease 0.4s, background-color ease 1.2s; */
}.settings input[type="checkbox"]:checked:before {
transition: left 0.2s;}
.settings input[type="checkbox"]:checked:hover{
opacity: 0.8;
}
.settings input[type="checkbox"]:active{
background-color: #666666!important;
border-color:#666666!important;
}
.settings input[type="checkbox"]:active::before{
background-color:white!important;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
position: fixed;
display: block;
width: 80%;
max-width: 800px;
left: 50%;
top: 50%;
max-height: 80%;
background-color: #ffffffdd;
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border: 1px solid var(--lyx-border);
padding:30px;
backdrop-filter: blur(10px);
-ms-transform-origin-y:translate(-50%,-50%);
-webkit-transform:translate(-50%,-50%);
-moz-transform:translate(-50%,-50%);
-ms-transform:translate(-50%,-50%);
-o-transform:translate(-50%,-50%);
z-index: 514;
display: none;
}
.settings{
overflow: scroll;
width: 100%;
}
#settingWindow{
display: none;
flex-direction: column;
}
.settingx{
width: 46%;
text-align: left;
font-size: 28px;
padding: 10px;
margin: 10px;
background-color: var(--lyx-light-grey);
opacity: 0.8;
border-radius: 10px;
}
.settingx:hover{
background-color: var(--lyx-gray);
}
.settingx i{
margin: 5px;
}
@media screen and (max-width:768px){
.settingx{
width:100%!important;
}
}
.setting-title{
text-align: center;
font-size: 30px;
display: flex;
}
#close-console{
text-align: right;
}
#stt,#close-console{
margin-left: auto;
}
#close-console:not(#close-console:hover){
color: var(--global-font-color);
}
+ +

然后在[blogRoot]/themes/butterfly/layout/includes/layout.pug中添加:

+
...
include ./rightside.pug
! =partial('includes/third-party/search/index', {}, {cache: true})
+ ! =partial('includes/setting',{}, {cache:false})
+ +

还要引入一些外挂css标签:

+
inject:
head:
- <style id="settingStyle"></style>
- <style id="css"></style>
- <style id="themeColor"></style>
...
bottom:
- <script type="text/javascript" src="https://gcore.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
...

+ +

butterfly\layout\includes\rightside.pug添加按钮

+
when 'comment'
if commentsJsLoad
a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment"))
i.fas.fa-comments
+ when 'bg'
+ button(type="button" title='切换背景' onclick="toggleWinbox()")
+ i.fas.fa-display
+ +

然后修改:

+
#rightside
- const { enable, hide, show } = theme.rightside_item_order
- const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside']
- - const showArray = enable ? show && show.split(',') : ['toc','chat','comment']
+ - const showArray = enable ? show && show.split(',') : ['toc','chat','comment','bg']
+

修改鼠标样式

+

致美化下载鼠标样式

+
+

在css中添加并修改:

+
/* 全局默认鼠标指针 */
body,
html {
cursor: url('/self/img/cursors/mogu/normal.cur'),auto !important;
}
/* 悬停图片时的鼠标指针 */
img {
cursor: url('/self/img/cursors/mogu/normal.cur'), auto !important;
}
/* 悬停图片弹出窗口时的鼠标指针 */
.fancybox__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
.carousel__slide{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择链接标签时的鼠标指针 */
a:hover,#site-name:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选择代码框展开和复制按钮时的鼠标指针 */
.copy-button:hover,.expand:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 选中输入框时的鼠标指针 */
input:hover, textarea:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停按钮时的鼠标指针 */
button:hover,.scroll-down-effects:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页脚链接标签(例如页脚徽标)时的鼠标指针 */
#footer-wrap a:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停页码时的鼠标指针 */
#pagination .page-number:hover {
cursor: url('./mouse/xxx.cur'), auto;
}
/* 悬停菜单栏时的鼠标指针 */
#nav .site-page:hover {
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停滚动条的鼠标指针(只对Chrome有效) */
::-webkit-scrollbar:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
/* 悬停评论按钮的鼠标指针(我使用的是Gitalk/Valine) */
.switch-btn,.switch-btn:before,.gt-user-inner,.gt-ico,.gt-user-name,.gt-btn,.vbtn,svg,.at_button{
cursor: url('./mouse/xxx.cur'), auto !important;
}
/* 悬停非链接文本时的鼠标指针 */
h1,h2,h3,h4,h5,h6,#subtitle,.content,.line,.post-content p,.post-content li{
cursor: url('/self/img/cursors/mogu/text.ani'), auto;
}
/* 悬停文章日期 */
.post-meta-date:hover,.post-meta-date-created:hover{
cursor: url('./mouse/xxx.cur'), auto!important;
}
+ + ]]>
工具教程 - docker + Butterfly
- 使用Java解析Properties文件 - /posts/50581.html - 主要函数 - - - - - - - - - - - - - - - - - - - - - - -
文件后缀函数方法
.Propertiesload加载文件
setProperty设置
getProperty获取
-

编写逻辑

创建加载文件的方法

-
/**
* 加载文件
* @return Properties 对象
* @throws IOException I/O输入异常
*/
private Properties readProperties() throws IOException{
// 实例化,创建 Properties 对象
Properties properties = new Properties();
try {
// 创建文件输入对象 FileInputStream("testpro.properties")
InputStream inputStream = new FileInputStream(filepath);
// 把文件输入对象放入缓存输入对象 new BufferedInputStream 里面
BufferedInputStream in = new BufferedInputStream(inputStream);
// 加载文件 in = ParseProperties.class.getResourceAsStream("testpro.properties"),自动获取 resources 文件夹下路径
properties.load(in);
}catch (IOException e){
e.printStackTrace();
}
return properties;
}
+ git提示Timed out的解决办法 + /posts/53812.html + 报错代码

运行git代码会提示Timed out错误

+
使用git,会发生报错:Failed to connect to github.com port 443 after 21098 ms: Timed out
-

获取key后面的数据

-
/**
* 获取数据
* @param key 数据名称
* @return 数据等号右边的值
* @throws Exception 异常
*/
public String getPro(String key) throws Exception {
// 判断文件里面有没有这个 Key
if (prop.containsKey(key)) {
// 获得key后面的value值
return prop.getProperty(key);
}else {
System.out.println("你获取的key值不对");
return "";
}
}
+

解决办法

设置代理

+
git config --global https.proxy
-

获取定位类型或者定位表达式

-
/**
* 返回定位类型或者定位表达式
* @param key 数据名称
* @param num 输入0/1
* @return num=0时,返回定位类型,num=1时,返回定位表达式
*/
public String get_pro_element(String key, int num){
return (num!=0 & num!=1) ? "num:参数输入错误" : prop.getProperty(key).split("->")[num];
}
+

取消代理

+
git config --global --unset https.proxy
+

然后输入git 命令使用

]]>
- 工具教程 + 经验分享 - java - Properties + Git
- java基础之方法和函数 - /posts/7388.html - 方法和函数 - - - - - - - - - - - - - - - - - - - - -
定义方式作用调用方式
函数public static void 函数名(){}封装指定功能的代码块函数名()
方法public [static] void 方法名(){}类的行为,对象可以执行的一些功能对象名.方法名
-

定义函数

-

使用static修饰的内容成为静态的内容

+ 使用pip install报错的解决办法 + /posts/4851.html + 报错提示

今天使用PyCharm下载一个模块pip.exe install locust,有错误提示

+
https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
// 报错位置
ERROR: Failed building wheel for psutil

ERROR: Could not build wheels for psutil, which is required to install pyproject.toml-based projects
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (d:\work software\python3.8\lib\site-packages)
+

原因

+

缺少对应的whl文件

-
public static void function1(){
}
- -

调用函数

function1()
- -

定义方法

public void class className1{

String name;
//静态变量
static String age;

//静态方法
public static function1(){
}

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public function2(){
}
}
-

调用方法

    -
  • 调用静态方法,不需要实例化
  • -
-
className1.function1()
- -
    -
  • 调用方法
  • -
-
className1的对象,需要实例化
- - -

静态方法注意事项:

    -
  • 静态方法无法直接引用非静态的变量
  • -
  • 静态方法不能直接调用非静态的方法
  • -
-

代码块

    -
  • 定义在方法内部,和局部变量处于平行的位置
  • -
  • 生命周期随着方法的调用而加载,随着方法的结束而消亡
  • -
  • 可以在局部代码块中定义一些使用范围和时间都很短的变量,用完就消失啦
  • -
-
public void class className1{

String name;
static String age;

//类方法
//非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
public void function2(){

//定义代码块
{
int i = 100;
System.out.println("方法中的变量i=" + i);
}

}
}
- -

构造代码块

    -
  • 构造代码快写在和构造方法平行的位置
  • -
  • 只要创建对象,构造代码块就会执行,不论是采用有参的还是无参数的构造方法
  • -
-
public void class{
//有参构造
class(String name){
}
//无参构造
class(){
}
//构造代码块
{
int i=100;
System.out.println("构造代码块i=" + i);
}

}
-

静态代码块

    -
  • 被static修饰的代码块称为静态代码块
  • -
  • 随着类的加载而加载
  • -
  • 静态代码块只执行一次,在程序中可以完成加载驱动等只执行一次的操作
  • -
-
public void className1{
static{
System.out.println("我是静态代码块i=" + i);
}
}
]]>
+

解决办法

碰到了这个错误ERROR: Failed building wheel for psutil,就需要下载psutil.whl

+

下载网站点击进入网站

+

下载psutil-5.9.0-cp38-cp38-win_amd64.whl文件

+

然后使用(pip install 文件的绝对路径)进行安装,然后使用pip.exe install locust正常安装

+

pip.exe install D:\Appium\psutil-5.9.0-cp38-cp38-win_amd64.whl

pip.exe install locust

+]]> - 工具教程 + 经验分享 - java + error - 包装类 - /posts/16468.html - -
  • 基本数据类型对应的包装类
  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    基本数据类型包装类大小(字节)
    byteByte1–(-128~127)
    shortShort2–(-32768~32767)
    intInteger4
    longLong8
    floatFloat4
    doubleDouble8
    charCharacter2
    booleanBoolean1
    -

    包装类方法

      -
    • Integer的作用主要是对int、Integer、String几种类型的数据进行转换,还能获取一些常量
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    方法描述
    compareTo()用于将对象与方法的参数进行比较(相同类型)
    decode()将方法的参数转为包装类对象
    equals()判断对象是否与参数相等
    Integer.parseInt(“字符串’)将字符串转为Int类型
    Integer.toString(int数据)将Int类型转为字符串
    -

    compareTo()方法

      -
    • 如果指定的数与参数相等返回 0。
    • -
    • 如果指定的数小于参数返回 -1。
    • -
    • 如果指定的数大于参数返回 1。
    • -
    + Mac提示安装包损坏 + /posts/408340008.html + Mac 提示文件已损坏,您应该将它移到废纸篓

    解决办法:

    +

    在终端输入

    +

    sudo xattr -d com.apple.quarantine /Applications/PicGo.app

    +

    /后面是安装路径

    +

    然后输入密码

    ]]>
    工具教程 - java + mac
    - 字符串 - /posts/47564.html - 字符串的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - -
    方法描述
    str.concat()将参数拼接到字符串上
    trim()去除字符串两端的字符串,不能去除中间
    replace(oldChar, newChar)将字符串的old参数替换为new参数
    length()返回此字符串的长度
    isEmpty()判断字符串是否为空
    -

    concat()方法

      -
    • 返回字符串类型
    • -
    • 字符串在后面拼接
      String str = "床前明月光";
      String str1 = str.concat("疑是地上霜。");
      System.out.println(str1);
    • + 使用jmeter录制压测 + /posts/52845.html + 业务
        +
      • 压测对象:http://news.baidu.com
      • +
      • 压测页面:首页、国际频道、财经频道
      • +
      • 步骤
          +
        • 访问首页
        • +
        • 单击“国际”(频道)
        • +
        • 单击“财经”(频道)
        -

        trim()方法

        String str = "    床  前明   月光   ";
        String str1 = str.trim();
        System.out.println(str1);
        -

        replace(oldChar, newChar)方法

        String str = "床前明月光";
        String str1 = str.replace("床", "llll");
        System.out.println(str1);
        -

        length()方法

          -
        • 返回int类型
          String str = "床前明月光";
          int str1 = str.length();
          System.out.println(str1);
        • + +
        • 操作手段:录制回放
        -

        isEmpty()方法

          -
        • 返回布尔类型
          String str = "床前明月光";
          boolean str1 = str.isEmpty();
          System.out.println(str1);
        • +

          操作步骤

            +
          • 添加录制器“HTTP(S) Test Script Recorder”

            +
              +
            • 右键Test Plan,点击add
            • +
            • 点击Non-Test Elements
            • +
            • 点击HTTP(S) Test Script Recorder
            • +
            +
          • +
          • 添加线程组“Thread Group”

            +
          • +
          • 添加录制控制器“Recording Controller”,

            +
              +
            • 右键线程组,点击and
            • +
            • 点击Logic Controller
            • +
            • 点击Recording Controller
            +
          • +
          • 录制脚本的配置(Test Plan Creation)

            +
              +
            • Port=8088
            • +
            • Target Controller = TestPlan > Tread Group > Recording Controller
            • +
            • 其他的配置保持默认
            • +
            +
          • +
          • 录制脚本的配置(Requests Filtering 请求过滤器)

            +
              +
            • URl Patterns to Include上添加正则.*\.(baidu\.com).*;表示只抓取百度URL的内容,不抓取其他网站的
            • +
            • URl Patterns to Exclude上添加正则.*\.(js|css|PNG|jpg|jpeg|ico|png|gif).*;去掉一些静态请求
            • +
            • 目的是:避免录制过多没必要的请求
            • +
            +
          • +
          • 单击保存按钮,将Jmeter脚本存储

            +
          • +
          • +
          • 打开浏览器,设置代理,将浏览器的代理服务地址指向http://localhost:8088,然后就可以进行访问录制了

            +
          • +
          • +
          • 访问百度新闻的首页、国际、财经页面

            +
          • +
          • +
          • 查看jmeter,录制结果在Recording Controller下面看到,然后停止录制

            +
          • +
          +

          校验

          录制结束后,要对录制的代码进行校验

          +
            +
          • 添加查看结果树组件
          • +
          +

          运行录制的代码,在查看结果树上查看运行的结果

          ]]> 工具教程 - java + jmeter - 抽象类与接口 - /posts/34655.html - 抽象类

          使用abstract修饰一个类,把这个类变成抽象类,抽象类不能直接创建对象,需要其他类进行继承该抽象类

          + Jmeter之断言和聚合报告 + /posts/55320.html + 怎么对请求进行响应断言
            +
          • 右键 HTTP Request

            +
          • +
          • 点击add --> Assertions --> Response Assertion

            +
          • +
          +

          断言组件就添加成功

          +

          配置响应断言

          Field to Test 下面就是断言的各种方法

            -
          • 抽象方法不能有方法体
          • -
          • 抽象方法必须使用abstract进行修饰,不能有方法体
          • -
          • 子类必须实现父抽象类的方法
            public abstract class Ahsse {
            String name;
            int age;

            //普通方法
            public String aaa(){
            return name;
            };
            // 抽象方法
            public abstract String bbb();
            }

            class sss extends Ahsse{

            @Override
            public String bbb() {
            System.out.println("实现抽象类的抽象方法");
            return "ces ";
            }
            }
          • +
          • Text Response 文本断言
          -

          接口

          使用interface定义接口,相当于class

          +
          +

          Patterns to Test输入title之间包含的文字,及配置成功

          +
            -
          • 接口可以多继承
          • -
          • 变量全部默认使用public static final修饰,使用之前必须赋值
          • -
          • 类里面全部是抽象方法(默认使用public abstract修饰,没有方法体)需要被实现类进行实现
          • -
          • 接口可以被多实现–implements
          • +
          • Response Code 响应码断言
          • +
          +
          +

          Patterns to Test输入响应码,比如 200

          +
          +
            +
          • Response Message
          • +
          • Request Headers
          • +
          • URL Sampled
          • +
          • Document(text)
          • +
          • Request Data
          • +
          +

          然后运行但并发压测,验证断言添加是否正确,在View Results Tree 中查看结果

          +

          怎么使用聚合报告

            +
          • 右键 Thread Group

            +
          • +
          • 点击 Add --> Listener --> Aggregate Report

            +
          • +
          +

          聚合报告就添加了

          +

          性能指标解读

            +
          • Average: 单个请求的平均响应时间
          • +
          • Median: 中位数,也就是50%用户的响应时间
          • +
          • 90%Line: 90%用户的响应时间
          • +
          • 95%Line: 95%用户的响应时间
          • +
          • 99%Line: 99%用户的响应时间
          • +
          • Min: 最小的请求响应时间
          • +
          • Max: 最大的请求响应时间
          • +
          • Error%: 错误率
          • +
          • Throughput: 吞吐量
          • +
          • Received KB/sec: 每秒从服务器接收到的数据量
          • +
          • Sent KB/sec: 每秒从客户端发送的请求的数量
          ]]>
          工具教程 - java + jmeter
          - 继承、重写与重载 - /posts/55332.html - 继承

          继承是相对于类来说,通过关键字extends来实现

          -
            -
          • 可以获取父类的属性和方法
          • -
          • 提高代码的复用性
          • -
          • 父类修改了内容,子类也会修改
          • -
          -

          调用

          父类的属性和方法

          -
            -
          • this表示当前对象的引用
          • -
          • super表示父类对象的引用
          • -
          • 调用构造方法
              -
            • this(参数列表)表示调用当前类中的构造方法
            • -
            • super(参数列表)表示调用父类的构造方法,必须放在方法中的第一行
            • -
            -
          • -
          • 调用属性
              -
            • this.属性表示调用当前对象的属性
            • -
            • super.属性表示调用父类的属性,可以拿到被重写之前的数据
            • -
            -
          • -
          • 调用方法
              -
            • this.方法表示调用当前对象的方法
            • -
            • super.方法表示调用父类的方法,可以拿到被重写之前的方法,不用放在代码的第一行
            • -
            -
          • -
          -

          重写

          重写是子类可以重写父类的方法,使用override标识

          -
            -
          • 方法名和参数不变,只修改方法体
          • -
          • 访问权限不能比父类的范围更小
          • -
          • 私有的方法能被子类继承,但不能使用和重写
          • -
          • 静态的方法能被子类继承,能使用但不能被重写
            public class testeass {

            public void aa(String name, int age){
            System.out.println(name + age);
            }
            }

            class testaaa extends testeass{

            @Override
            public void aa(String name, int age) {
            System.out.println("这是重写方法,方法名、参数和返回数据都不变,只能修改方法体");
            System.out.println(name + age);
            }
            }
          • -
          -

          重载

          重载是同一个类下对方法进行重载

          -
            -
          • 方法名相同,参数不相同 (参数个数不同/参数类型不同/参数排列顺序不同)
          • -
          • 返回类型不限制
            public class jichu {

            // 原方法
            public void hello(String name, int aa){
            System.out.println("拼接起来的值是:"+ name + aa );
            }

            // 重载后的方法
            public void hello(int aa, String name){
            System.out.println("aaaaaaa:" + aa);
            }
            }
          • + jmeter自动化压力测试 + /posts/63722.html + 思路
              +
            • jmeter脚本实现压测逻辑
            • +
            • Shell控制逻辑
            • +
            • 使用jmeter进行静默压测
            ]]>
            工具教程 - java + jmeter - Yaml的使用 - /posts/31621.html - 编写字符串
            #字符串
            #单行
            username: admin
            username1: "周杰\n伦" #双引号不转义
            username2: '周杰\n伦' ##单引号转义
            #多行
            william:



            william2: |




            william3: >



            - -

            回显的结果是:

            -
            { username: 'admin',
            username1: '周杰\n伦',
            username2: '周杰\\n伦',
            william: '一 二 三',
            william2: '一\n二\n三\n',
            william3: '一 二 三\n' }
            - -
            强制转换
            forceStr: !!str 123
            forceBoll: !!str true
            forceInt: !!int "123"
            - -

            回显的结果是:

            -
            forceStr: '123',
            forceBoll: 'true',
            forceInt: 123 }
            - -
            编写数组
            #数组
            myFavourite:
            - backaetball
            - football

            myFavourite2: ["bass","bahddd"]
            - -

            回显的结果是:

            -
            myFavourite: [ 'backaetball', 'football' ],
            myFavourite2: [ 'bass', 'bahddd' ],
            - -
            编写对象
            #对象
            autotest:
            username: root
            password: root
            age: 18
            male: true

            autotest2: [{username: admin, password: root, age: 22, male: false}]
            - -

            回显的结果是:

            -
            autotest: { username: 'root', password: 'root', age: 18, male: true },
            autotest2: [ { username: 'admin', password: 'root', age: 22, male: false } ],
            - -
            编写复合结构的
            #复合结构
            companies:
            -
            id: 1
            name: zhangsan
            value: 10e+11

            -
            id: 2
            name: lisi
            value: 10e+12


            websites:
            baidu: www.baidu.com
            google: www.google.com
            - -

            回显的结果是:

            -
            companies: 
            [ { id: 1, name: 'zhangsan', value: 1000000000000 },
            { id: 2, name: 'lisi', value: 10000000000000 } ],
            websites: { baidu: 'www.baidu.com', google: 'www.google.com' } }
            - -
            引用
            #引用
            father: &father_lastName
            lastName:

            son:
            <<: *father_lastName
            firstName:
            age: 18
            - -

            回显的结果是:

            -
            father: { lastName: '周' },
            son: { lastName: '周', firstName: '董', age: 18 } }
            - + Jmeter之静默压测 + /posts/3219.html + 静默压测
            +

            jmeter -n -t $jmx_file -l $jtl_file

            +
            +

            如: jmeter -n -t HTTP代理服务器luzhi.jmx -l result.jtl

            +

            jmx: Jmeter压测程序脚本文件
            jtl: Jmeter压测请求响应数据的原始文件,查看结果树和聚合报告可以导入该文件查看

            ]]>
            工具教程 - yaml + jmeter
            - 使用Postman如何做接口测试 - /posts/20480.html - Postman安装
            -

            Postman下载:https://www.postman.com/downloads/

            -
            -

            image
            下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

            -

            postman主要功能说明

            postman主要模块功能介绍

            image
            点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
            image
            image
            image
            image
            创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
            image
            image

            -

            发送http请求和分析响应数据

            -

            在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
            请求的方法:get或post
            请求的URL:协议+域名/IP+端口+资源路径

            -
            -

            不带参数的请求:
            image
            发送需要认证的get接口:
            image

            -

            ------------恢复内容开始------------

            ## Postman安装 -> Postman下载:https://www.postman.com/downloads/ - -

            image
            下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

            -

            postman主要功能说明

            1、postman主要模块功能介绍

            image
            点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
            image
            image
            image
            image
            创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
            image
            image

            -

            发送http请求和分析响应数据

            -

            在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
            请求的方法:get或post
            请求的URL:协议+域名/IP+端口+资源路径

            -
            -

            get请求

            不带参数的请求:
            image
            发送需要认证的get接口:
            image

            -

            post请求

            选择请求格式为post
            传参:

            -
              -
            • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
            • -
            • Body中Form-data:以表单的方式进行数据编辑
            • -
            • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
            • -
            • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.
            • + Jmeter之json数据提取和参数传递 + /posts/26691.html + 安装组件JSON Extractor
                +
              • 右键Http Request
              • +
              • 点击Add -> Post Processors -> JSON Extractor
              -

              Pre-request Scrip

              image

              -

              Tests

              image

              -

              postman保存测试用例

              image

              -

              postman批量运行

              image
              image

              -

              选择文件进行参数化

              json文件

              image

              -

              txt文件

              image
              使用参数时,变量名称要与文件里的变量名保持一致

              -

              postman环境管理

              image
              image
              引用环境信息:

              -

              postman全局变量

              image
              也可以用javascript写变量:
              image
              引用全局变量信息:
              image
              image
              Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
              image

              -

              关联

              ------------恢复内容结束------------

              -

              ------------恢复内容开始------------

              ## Postman安装 -> Postman下载:https://www.postman.com/downloads/ - -

              image
              下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

              -

              postman主要功能说明

              1、postman主要模块功能介绍

              image
              点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
              image
              image
              image
              image
              创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
              image
              image

              -

              发送http请求和分析响应数据

              -

              在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
              请求的方法:get或post
              请求的URL:协议+域名/IP+端口+资源路径

              -
              -

              get请求

              不带参数的请求:
              image
              发送需要认证的get接口:
              image

              -

              post请求

              选择请求格式为post
              传参:

              -
                -
              • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
              • -
              • Body中Form-data:以表单的方式进行数据编辑
              • -
              • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
              • -
              • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.
              • +

                组件安装成功

                +

                组件配置

                  +
                • Names of created variables : 参数变量名称,提取出来的json使用这个变量
                • +
                • Json Path expressions : JSON提取的正则 比如:$.access_token这个是提取response里面的token
                • +
                • Match NO.(0 for Random):这个是写提取出json的第几条, 比如使用正则能匹配多条,使用这个输入数字就可以匹配对应的
                -

                Pre-request Scrip

                image

                -

                Tests

                image

                -

                postman保存测试用例

                image

                -

                postman批量运行

                image
                image

                -

                选择文件进行参数化

                json文件

                image

                -

                txt文件

                image
                使用参数时,变量名称要与文件里的变量名保持一致

                -

                postman环境管理

                image
                image
                引用环境信息:

                -

                postman全局变量

                image
                也可以用javascript写变量:
                image
                引用全局变量信息:
                image
                image
                Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
                image

                -

                关联

                断言

                Postman通过tests插入断言
                image

                -

                关联

                -

                把上一个接口的返回数据作为下一个参数的输入参数使用

                +
                引用json变量
                  +
                • Jmeter中引用变量的方法${变量名}
                • +
                +

                调试脚本 Debug Sampler

                +

                帮助检查变量值,调试脚本

                  -
                • 先发送一个接口,查看返回值
                • -
                • 在上一个接口的tests里面添加js脚本
                    -
                  • 获取上一个接口返回值并赋值给变量
                  • -
                  • 定义全局变量,并获取要作为下一个接口输入的数据字段
                  • -
                  -
                • -
                • 引用全局变量
                • +
                • 右键Thread Group
                • +
                • 点击Add -> Sampler -> Debug Sampler
                -

                生成并导出接口脚本

                导出接口测试脚本

                image

                -

                导出测试集

                image
                image

                -

                导入测试集

                image

                +

                注意:把Debug放到所有请求的最底下,运行的后可以查看变量参数,方便调试

                ]]> 工具教程 - postman + jmeter - 测试必会的sql基本操作 - /posts/11783.html - 1、创建数据库
                create database 数据库名;
                create database 数据库名 character set 字符集;
                - -
                2、查看全部的数据库
                show databases;   
                - -

                3、查看某个数据库的定义的信息:

                -
                show create database 数据库名;         
                - -
                4、删除数据库
                drop database 数据库名称;
                - -

                5、切换数据库:

                -
                use 数据库名;
                - -

                6、查看正在使用的数据库:

                -
                select database();          
                - -

                7、查看数据库中的所有表:

                -
                show tables;
                - -

                8、查看表结构:

                -
                desc 表名;    
                - -

                9、修改表删除列.

                -
                alter table 表名 drop 列名;            
                - -

                10、修改表名

                -
                rename table 表名 to 新表名;              
                - -

                11、修改表的字符集

                -
                alter table 表名 character set 字符集;
                - -

                12、数据类型与约束

                + Jmeter之全局参数设置和csv数据导入 + /posts/49262.html + 全局参数设置
                添加组件
                  +
                • 右键Thread Group
                • +
                • 点击Add -> Config Element -> User Defined Variables
                • +
                +
                添加对应的变量
                  +
                • hostname:localhost
                • +
                • port:9090
                • +
                • protocol:http
                • +
                +

                然后再请求参数中使用对应的参数变量名

                  -
                • int :整数 有符号和无符号,长度不受限制
                • -
                • varchar:字符串 中文/数字/字母都是一字字符,受长度限制
                • -
                • decimal :小数 decimal(5,2)总长度5位,整数3位,小数2位
                • -
                • 主键 id :int unsigned primary key auto_increment
                • -
                • 非空 :not null
                • -
                • 唯一 :unique
                • -
                • 默认 :default
                • +
                • ${hostname}
                • +
                • ${port}
                • +
                • ${protocol}
                -

                SQL中表的操作

                1、创建表

                create table 表名(字段名 类型 约束,.....)
                - -

                2、删除表

                drop table 表名
                drop table if exists 表名
                - -

                3、表数据操作

                3.1、添加数据
                insert into 表名 values(值1,值2...)给表中所有字段插入数据
                insert into 表名(字段2,字段1values(值2,值1
                - -
                3.2、修改数据
                update 表名 set 字段1=1,字段2=2 where 条件
                isdelete 逻辑删除
                - -
                3.3、删除数据
                delete from 表名 where 条件
                - -
                3.4、查询数据
                  -
                • 3.4.1、查询表中所有信息
                  select * from 表名 where 条件
                  -
                • -
                • 3.4.2、查询表中指定字段
                  select 字段1,字段2,字段3...from 表名 where 条件
                  -
                • -
                • 3.4.3、给字段取别名
                  select 字段1as) 别名,字段2 别名 from 表名 where 条件
                  -
                • -
                • 3.4.4、去重
                  select distinct 字段 from 表名 where 条件
                  -
                • -
                • 3.4.5、比较运算符
                  select * from 表名 where age>20
                  -
                • -
                • 3.4.6、逻辑运算符
                    -
                  • and 满足所有条件

                    -
                  • -
                  • or 满足其中任意一个条件

                    -
                  • -
                  • not 不满足条件

                    -
                  • +

                    csv数据导入

                    创建csv文件
                      +
                    • 使用Excel创建csv文件
                    • +
                    • csv数据之间使用英文逗号来分割
                    • +
                    • 保存成.csv文件
                    - -
                  • 3.4.7、模糊查询
                      -
                    • like
                    • -
                    • % 0到任意多个字符
                    • -
                    • _表示任意一个字符
                    • +
                      添加csv导入组件
                        +
                      • 右键Thread Group
                      • +
                      • 点击Add -> Config Element -> CSV Data Set Config
                      - -
                    • 3.4.8、范围查询
                        -
                      • in 在一个非连续的范围内
                      • -
                      • between and 在一个连续的范围内 闭区间 小的数据在前
                      • +
                        配置
                          +
                        • Filename:文件位置
                        • +
                        • File encoding:编码格式
                        • +
                        • Variable Names(comma-delimited):数据参数 如:no,username,password
                        • +
                        • lgnore first lline (only user if Variable Names is not empty):是否忽略第一行(表头)
                        • +
                        • Delimiter(use "\t" for tab):分隔符
                        • +
                        • Allow quoted data?:是否允许双引号括住数据
                        • +
                        • Recycle on EOF?:到了文件结尾是否循环
                        • +
                        • Stop thread on EOF?:到了文件结尾是否停止
                        • +
                        • Sharinng mode:共享模式
                        - -
                      • 3.4.9、空查询
                          -
                        • is null
                        • -
                        • ‘’空字符串
                        • +

                          注意:把请求的参数修改为:${变量}

                          +]]> + + 工具教程 + + + jmeter + + + + jmeter对数据库进行增删改查 + /posts/55393.html + 环境
                            +
                          • jmeter版本(5.1.1)
                          • +
                          • mysql-connector-java-8.0.15.jar
                          - +

                          mysql.jar放在jmeter的lib目录下

                          +

                          配置

                          连接配置组件

                            +
                          • 右键Thread Group
                          • +
                          • 点击Add -> Config Element -> JDBC Connection Configuration
                          -
                          3.5、多表查询
                            -
                          • 3.5.1、排序

                            -
                            select * from 表名 where 条件 order by1asc|desc,列2 asc|desc
                            select * from student where 条件 order by convert(字段 using gbk)asc|desc 纯中文转换后排序
                            -
                          • -
                          • 3.5.2、聚合函数

                            -
                            count: 总数 select count(*/字段)from 表名 where 条件 
                            max: 最大值 select max(age) from 表名 where 条件
                            min: 最小值 select min(age) from 表名 where 条件
                            avg: 平均值 select avg(grade) from 表名 where 条件
                            sum: 求和 select sum(grade) from 表名 where 条件
                            select avg(age)as 平均年龄,max(age)最大年龄,min(age)最小年龄 from 表名 where 条件
                            -
                          • -
                          • 3.5.3、分组

                            -
                            select * from 表名 group by 字段,字段2 having 条件
                            -
                          • -
                          • 3.5.4、分页

                            -
                            select * from 表名 limit 05 从第一行数据开始,显示5
                            select * from 表名 limit (n-1*m,m n代表第几页,m代表每页显示多少条数据
                            -
                          • -
                          • 3.5.5、等值连接

                            -
                            方式一 :
                            select * from1,表2,表3 where1.=2.and2.=3.where 条件
                            方式二 内连接 取交集:
                            select * from1 inner join2 on1.=2.inner join3 on2.=3.where 条件
                            -
                          • -
                          • 3.5.6、左连接

                            -
                            -

                            左边的表全显示,右边表能匹配的上的数据连接显示,匹配不上(没有的)以null补充

                            -
                            -
                            select * from1 left join2 on1.=2.left join3 on2.=3.where 条件
                            -
                          • -
                          • 3.5.7、右连接

                            -
                            -

                            右边的表全显示,左边表能匹配上的数据连接显示,匹配不上(没有的)以null补充

                            -
                            -
                            select * from1 right join2 on1.=2.right join3 on2.=3.where 条件
                            -
                          • -
                          • 3.5.8、自关联

                            -
                            select * from 表 别名1 inner join 表 别名2 on 别名1.aid=别名2.pid
                            -
                          • -
                          • 3.5.9、子查询
                              -
                            • 标量子查询
                            • +

                              参数配置

                                +
                              • ==Varianle Name for created pool==:db_connnection_pool # 连接池名称
                              • +
                              • ==Validation Query==:select 1
                              • +
                              • ==Database URL==:jdbc:mysql://8.142.144.75:3306/jmeter_class?alloMultiQueries = true&useSSL=false
                              • +
                              • ==JDBC Driver class==:选择com.mysql.jbc.Driver
                              • +
                              • 输入username
                              • +
                              • 输入password
                              -
                              -

                              子查询结果输出的是一行一列

                              -
                              -
                              select * from student where age>(select avg(age) from student)
                              - -
                                -
                              • 列子查询
                              • +

                                Jmeter数据库JDBC请求

                                  +
                                • 右键Thread Group
                                • +
                                • 点击Add -> Sampler -> JDBC Request
                                -
                                -

                                子查询的结果输出的是一列多行

                                -
                                -
                                in:  
                                select * from student where age in
                                (select age from student where age=18)

                                any/some: >:大于最小的; <: 小于最大的
                                select * from student where age>/< any
                                (select age from student where age between 18 and 22)

                                all: >:大于最大的; <: 小于最小的
                                select * from student where age>/<all
                                (select age from student where age between 18 and 22
                                - -
                                  -
                                • 行子查询
                                • +
                                  配置介绍

                                  Variable Name Bound to Pool: 配置参数区
                                  SQL Query:sql语句区
                                  其他:变量配置区

                                  +
                                  举个栗子:通过Insert语句,向数据库添加测试数据
                                    +
                                  • JDBC Connection Configuration: db_connnection_pool #输入连接池名称
                                  • +
                                  • Query Type:选择Prepared Updata Statement
                                  • +
                                  • Quert:输入sql语句
                                  -
                                  -

                                  子查询的结果输出的是一行多列

                                  -
                                  -
                                  select * from student where(name,sex)=select name,sex from student where sex='男' order by age desc limit 1
                                  - +
                                  INSERT INTO jmeter_class.user (`username`,`password`) VALUES(?,?)
                                    -
                                  • 表子查询
                                  • -
                                  -
                                  -

                                  子查询的输出结果是一个表

                                  -
                                  -
                                  select * from scores inner joinselect cno from courses where cname in('数据库',‘系统测试’) as c on scores.cno=c.cno
                                  +
                                • Paeameter values:testuser,aaaaaa
                                • +
                                • Paeameter types:varchar,varchar
                                • +
                                • Query timeout(s):6
                                • +
                                • 添加查看结果树
                                • +
                                • 运行
                                -
                                3.6、数据分表
                                insert into goods_cate(cate_name) select distinct cate from goods;

                                create table goods_cate (id int unsigned primary key auto_incremen,cate varchar(10)) select distinct cate from goods;

                                update goods inner join goods_cate on goods_cate.cate=goods.cate set goods.cate=goods_cate.id
                                ]]> +

                                运行结果ResponseBody:

                                +
                                1 updates.
                                +

                                这就配置成功

                                +]]> 工具教程 - sql + jmeter - 性能测试主要关注点 - /posts/32473.html - 性能关注点

                                接口响应时间

                                -

                                吞吐量

                                -

                                TPS: 事务处理能力,每秒处理事务数(打开页面、登录、选择商品、加入购物车、下单、付款)

                                -

                                注意:“日活” 每日活跃用户数,是运营数据,与性能无关

                                -

                                八二原则

                                -
                                -

                                计算QPS/TPS

                                -
                                -

                                相信80%会集中在20%时间内,24小时的流量集中在白天8小时内,同时在午高峰达到高峰

                                -

                                举个栗子

                                根据相应耗时计算公式预估所需并发,一次请求100ms

                                -

                                根据 QPS = Vue * Rt

                                -

                                1000000 * 80% / 8 * 3600 * 20% = 277 QPS

                                -

                                需要27个并发

                                + Constant Timer定时器 + /posts/527.html + 作用

                                就是loadrunner上面的思考时间,就是模拟真实用户操作过程的等待时间

                                +

                                生效范围

                                定时器的父节点和子节点,如果想让一个请求强制停止一段时间,就把定时器放在这个请求的下面

                                +

                                单位是以ms为单位,1s=1000ms

                                ]]>
                                - 经验分享 + 工具教程 - 性能测试 + jmeter
                                - 关闭chrome浏览器自动更新 - /posts/43612.html - 屏蔽谷歌的更新服务器
                                修改 "C:\Windows\System32\drivers\etc\host 文件,在最后增加
                                - -

                                修改C:\Windows\System32\drivers\etc\hosts文件,在最后增加

                                -
                                127.0.0.1 update.googleapis.com
                                - -

                                保存后win+r,输入CMD,输入ipconfig /flushdns刷新DNS

                                -

                                然后重启浏览器

                                -]]>
                                + Modeule Controller和Include Controller + /posts/34250.html + Modeule Controller介绍]]> 工具教程 + + jmeter +
                                - 自动化基础之Xpath定位 - /posts/43613.html - 常用函数定位 - - - - - - - - - - - - - - -
                                定位函数position
                                //*contains(text(),’文字’)/li[position()=3]找到第三个 li
                                //*contains(text(),’文字’)/li[position()<=2]找到前两个 li
                                -
                                Xpath函数进行定位
                                - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                定位方式描述实例
                                contains匹配在元素文本中查找包含 ‘文字’ 的元素//*contains(text(),’文字’)
                                starts-with匹配所有id开头为 ‘s’ 的元素//*[starts-with(@id,’s’)]
                                ends-with匹配所有id结尾头为 ‘s’ 的元素//*[ends-with(@id,”s”)]
                                following-sibling匹配和 ‘ul’ 元素同级别的下一个元素//div/following-sibling::ul
                                preceding-sibling匹配当前节点之前的所有同级节点
                                ancestor匹配当前节点的所有父级,祖父级还有更高级//div/ancestor::li[@role=”menuitem”]
                                parent匹配当前节点的父节点,相当于 ..//div/parent::button
                                -]]>
                                + 循环控制器Loop Controller + /posts/48990.html + 作用

                                指定子节点运行的次数,使用变量或数值进行控制

                                +
                                  +
                                • Infinite:表示一直循环
                                • +
                                • 如果同时设置线程组循环次数和循环控制器的循环次数,那控制器子节点运行的次数为两个数值相乘的结果
                                • +
                                +

                                添加

                                ]]>
                                工具教程 - xpath + jmeter
                                - 使用jmeter录制压测 - /posts/52845.html - 业务
                                  -
                                • 压测对象:http://news.baidu.com
                                • -
                                • 压测页面:首页、国际频道、财经频道
                                • -
                                • 步骤
                                    -
                                  • 访问首页
                                  • -
                                  • 单击“国际”(频道)
                                  • -
                                  • 单击“财经”(频道)
                                  • -
                                  -
                                • -
                                • 操作手段:录制回放
                                • -
                                -

                                操作步骤

                                  -
                                • 添加录制器“HTTP(S) Test Script Recorder”

                                  -
                                    -
                                  • 右键Test Plan,点击add
                                  • -
                                  • 点击Non-Test Elements
                                  • -
                                  • 点击HTTP(S) Test Script Recorder
                                  • -
                                  -
                                • -
                                • 添加线程组“Thread Group”

                                  -
                                • -
                                • 添加录制控制器“Recording Controller”,

                                  -
                                    -
                                  • 右键线程组,点击and
                                  • -
                                  • 点击Logic Controller
                                  • -
                                  • 点击Recording Controller
                                  • -
                                  -
                                • -
                                • 录制脚本的配置(Test Plan Creation)

                                  -
                                    -
                                  • Port=8088
                                  • -
                                  • Target Controller = TestPlan > Tread Group > Recording Controller
                                  • -
                                  • 其他的配置保持默认
                                  • -
                                  -
                                • -
                                • 录制脚本的配置(Requests Filtering 请求过滤器)

                                  -
                                    -
                                  • URl Patterns to Include上添加正则.*\.(baidu\.com).*;表示只抓取百度URL的内容,不抓取其他网站的
                                  • -
                                  • URl Patterns to Exclude上添加正则.*\.(js|css|PNG|jpg|jpeg|ico|png|gif).*;去掉一些静态请求
                                  • -
                                  • 目的是:避免录制过多没必要的请求
                                  • + 随机控制器Random Controller和Random Order Controller + /posts/29537.html + 作用
                                      +
                                    • Random Controller:控制器子节点随机运行一个请求
                                        +
                                      • lgnore sub-controller blocks:忽略子控制器块
                                    • -
                                    • 单击保存按钮,将Jmeter脚本存储

                                      -
                                    • -
                                    • -
                                    • 打开浏览器,设置代理,将浏览器的代理服务地址指向http://localhost:8088,然后就可以进行访问录制了

                                      -
                                    • -
                                    • -
                                    • 访问百度新闻的首页、国际、财经页面

                                      -
                                    • -
                                    • -
                                    • 查看jmeter,录制结果在Recording Controller下面看到,然后停止录制

                                      -
                                    • -
                                    -

                                    校验

                                    录制结束后,要对录制的代码进行校验

                                    -
                                      -
                                    • 添加查看结果树组件
                                    • +
                                    • Random Order Controller:控制器子节点随机运行全部请求
                                    -

                                    运行录制的代码,在查看结果树上查看运行的结果

                                    ]]>
                                    工具教程 @@ -2205,13 +1745,9 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - jmeter自动化压力测试 - /posts/63722.html - 思路
                                      -
                                    • jmeter脚本实现压测逻辑
                                    • -
                                    • Shell控制逻辑
                                    • -
                                    • 使用jmeter进行静默压测
                                    • -
                                    + 逻辑控制器Simple Controller + /posts/31868.html + 作用

                                    把多个请求放入Simple Controller,可以多个请求进行同时操作

                                    ]]>
                                    工具教程 @@ -2221,56 +1757,30 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for
                                    - Jmeter之断言和聚合报告 - /posts/55320.html - 怎么对请求进行响应断言
                                      -
                                    • 右键 HTTP Request

                                      -
                                    • -
                                    • 点击add --> Assertions --> Response Assertion

                                      -
                                    • -
                                    -

                                    断言组件就添加成功

                                    -

                                    配置响应断言

                                    Field to Test 下面就是断言的各种方法

                                    -
                                      -
                                    • Text Response 文本断言
                                    • -
                                    -
                                    -

                                    Patterns to Test输入title之间包含的文字,及配置成功

                                    -
                                    -
                                      -
                                    • Response Code 响应码断言
                                    • -
                                    -
                                    -

                                    Patterns to Test输入响应码,比如 200

                                    -
                                    -
                                      -
                                    • Response Message
                                    • -
                                    • Request Headers
                                    • -
                                    • URL Sampled
                                    • -
                                    • Document(text)
                                    • -
                                    • Request Data
                                    • -
                                    -

                                    然后运行但并发压测,验证断言添加是否正确,在View Results Tree 中查看结果

                                    -

                                    怎么使用聚合报告

                                      -
                                    • 右键 Thread Group

                                      -
                                    • -
                                    • 点击 Add --> Listener --> Aggregate Report

                                      -
                                    • -
                                    -

                                    聚合报告就添加了

                                    -

                                    性能指标解读

                                      -
                                    • Average: 单个请求的平均响应时间
                                    • -
                                    • Median: 中位数,也就是50%用户的响应时间
                                    • -
                                    • 90%Line: 90%用户的响应时间
                                    • -
                                    • 95%Line: 95%用户的响应时间
                                    • -
                                    • 99%Line: 99%用户的响应时间
                                    • -
                                    • Min: 最小的请求响应时间
                                    • -
                                    • Max: 最大的请求响应时间
                                    • -
                                    • Error%: 错误率
                                    • -
                                    • Throughput: 吞吐量
                                    • -
                                    • Received KB/sec: 每秒从服务器接收到的数据量
                                    • -
                                    • Sent KB/sec: 每秒从客户端发送的请求的数量
                                    • + 事务控制器Transcation Controller + /posts/15488.html + 作用

                                      一个事务会包含并请求,然后查看一个事务的QPS等性能指标

                                      +

                                      指标

                                      QPS:每秒处理完请求的次数,具体指1s内发出请求到服务器处理完成并返回结果的次数

                                      +

                                      TPS:每秒处理完的事务次数,一般TPS是对整个系统来讲的,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能对应多个请求,对于衡量单个接口服务的处理能力,一般使用QPS

                                      +

                                      参数

                                        +
                                      • Generate Parent sample:生成父样例,就是控制器里面的请求不展示
                                      +

                                      没有选中Generate Parent sample,运行后的结果是

                                      +
                                      + +
                                      +
                                      + +
                                      +选中后`Generate Parent sample`,运行后的结果是 +
                                      + +
                                      +
                                      + +
                                      + + ]]>
                                      工具教程 @@ -2280,14 +1790,9 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - Jmeter之静默压测 - /posts/3219.html - 静默压测
                                      -

                                      jmeter -n -t $jmx_file -l $jtl_file

                                      -
                                      -

                                      如: jmeter -n -t HTTP代理服务器luzhi.jmx -l result.jtl

                                      -

                                      jmx: Jmeter压测程序脚本文件
                                      jtl: Jmeter压测请求响应数据的原始文件,查看结果树和聚合报告可以导入该文件查看

                                      -]]>
                                      + 逻辑控制器If Controller + /posts/12932.html + 逻辑控制器If Controller]]> 工具教程 @@ -2296,29 +1801,20 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for
                                      - Jmeter之json数据提取和参数传递 - /posts/26691.html - 安装组件JSON Extractor
                                        -
                                      • 右键Http Request
                                      • -
                                      • 点击Add -> Post Processors -> JSON Extractor
                                      • -
                                      -

                                      组件安装成功

                                      -

                                      组件配置

                                        -
                                      • Names of created variables : 参数变量名称,提取出来的json使用这个变量
                                      • -
                                      • Json Path expressions : JSON提取的正则 比如:$.access_token这个是提取response里面的token
                                      • -
                                      • Match NO.(0 for Random):这个是写提取出json的第几条, 比如使用正则能匹配多条,使用这个输入数字就可以匹配对应的
                                      • -
                                      -
                                      引用json变量
                                        -
                                      • Jmeter中引用变量的方法${变量名}
                                      • + Constant Throughput Timer定时器 + /posts/48851.html + 作用

                                        限制整个运行过程中的生成的吞吐量不要超过某一个值,防止压死系统

                                        +

                                        参数

                                          +
                                        • Target throughput(in samples per minute):目标吞吐量,指的是每分钟发送的请求数,对应测试要求的20 QPS,这里应该输入1200
                                        • +
                                        • Calculate Throughput based on:有5个选项
                                            +
                                          • This Thread only:控制每个线程的吞吐量,这个模式的作用是:总的吞吐量=Target throughput * 线程的数量
                                          • +
                                          • All active threads:设置的Target throughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理时间后再次运行。活跃线程指的是同一时刻同时运行的线程
                                          • +
                                          • All active threads in current thread group:设置的`Target throughput将分配在当前线程祖的每一个活跃线程上,当测试计划只有一个线程组,这个模式作用和All active threads一样
                                          • +
                                          • All active threads(shared):与All active threads选项基本一致,唯一区别是,每一个活跃线程都会在所有活跃线程上一次运行结束后等待合理时间再次运行
                                          • +
                                          • All active threads in current thread group(shared):与All active threads in current thread group选项基本一致,唯一区别是,每个活跃线程都会在所有活跃线程的上一次运行结束等待合理的时间后再次运行
                                          -

                                          调试脚本 Debug Sampler

                                          -

                                          帮助检查变量值,调试脚本

                                          -
                                          -
                                            -
                                          • 右键Thread Group
                                          • -
                                          • 点击Add -> Sampler -> Debug Sampler
                                          • +
                                          -

                                          注意:把Debug放到所有请求的最底下,运行的后可以查看变量参数,方便调试

                                          ]]> 工具教程 @@ -2328,44 +1824,14 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - Jmeter之全局参数设置和csv数据导入 - /posts/49262.html - 全局参数设置
                                          添加组件
                                            -
                                          • 右键Thread Group
                                          • -
                                          • 点击Add -> Config Element -> User Defined Variables
                                          • -
                                          -
                                          添加对应的变量
                                            -
                                          • hostname:localhost
                                          • -
                                          • port:9090
                                          • -
                                          • protocol:http
                                          • -
                                          -

                                          然后再请求参数中使用对应的参数变量名

                                          -
                                            -
                                          • ${hostname}
                                          • -
                                          • ${port}
                                          • -
                                          • ${protocol}
                                          • -
                                          -

                                          csv数据导入

                                          创建csv文件
                                            -
                                          • 使用Excel创建csv文件
                                          • -
                                          • csv数据之间使用英文逗号来分割
                                          • -
                                          • 保存成.csv文件
                                          • -
                                          -
                                          添加csv导入组件
                                            -
                                          • 右键Thread Group
                                          • -
                                          • 点击Add -> Config Element -> CSV Data Set Config
                                          • -
                                          -
                                          配置
                                            -
                                          • Filename:文件位置
                                          • -
                                          • File encoding:编码格式
                                          • -
                                          • Variable Names(comma-delimited):数据参数 如:no,username,password
                                          • -
                                          • lgnore first lline (only user if Variable Names is not empty):是否忽略第一行(表头)
                                          • -
                                          • Delimiter(use "\t" for tab):分隔符
                                          • -
                                          • Allow quoted data?:是否允许双引号括住数据
                                          • -
                                          • Recycle on EOF?:到了文件结尾是否循环
                                          • -
                                          • Stop thread on EOF?:到了文件结尾是否停止
                                          • -
                                          • Sharinng mode:共享模式
                                          • + Gaussian Random Timer定时器 + /posts/40953.html + 作用

                                            生成随机等待时间

                                            +

                                            参数

                                              +
                                            • Deviation(in milliseconds) :高斯定时器参数,随机的
                                            • +
                                            • Constant Delay Offset(in milliseconds):固定等待时长
                                            -

                                            注意:把请求的参数修改为:${变量}

                                            +

                                            生成的时长是Deviation + Constant Delay Offset

                                            ]]>
                                            工具教程 @@ -2375,46 +1841,17 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - jmeter对数据库进行增删改查 - /posts/55393.html - 环境
                                              -
                                            • jmeter版本(5.1.1)
                                            • -
                                            • mysql-connector-java-8.0.15.jar
                                            • -
                                            -

                                            mysql.jar放在jmeter的lib目录下

                                            -

                                            配置

                                            连接配置组件

                                              -
                                            • 右键Thread Group
                                            • -
                                            • 点击Add -> Config Element -> JDBC Connection Configuration
                                            • -
                                            -

                                            参数配置

                                              -
                                            • ==Varianle Name for created pool==:db_connnection_pool # 连接池名称
                                            • -
                                            • ==Validation Query==:select 1
                                            • -
                                            • ==Database URL==:jdbc:mysql://8.142.144.75:3306/jmeter_class?alloMultiQueries = true&useSSL=false
                                            • -
                                            • ==JDBC Driver class==:选择com.mysql.jbc.Driver
                                            • -
                                            • 输入username
                                            • -
                                            • 输入password
                                            • -
                                            -

                                            Jmeter数据库JDBC请求

                                              -
                                            • 右键Thread Group
                                            • -
                                            • 点击Add -> Sampler -> JDBC Request
                                            • -
                                            -
                                            配置介绍

                                            Variable Name Bound to Pool: 配置参数区
                                            SQL Query:sql语句区
                                            其他:变量配置区

                                            -
                                            举个栗子:通过Insert语句,向数据库添加测试数据
                                              -
                                            • JDBC Connection Configuration: db_connnection_pool #输入连接池名称
                                            • -
                                            • Query Type:选择Prepared Updata Statement
                                            • -
                                            • Quert:输入sql语句
                                            • -
                                            -
                                            INSERT INTO jmeter_class.user (`username`,`password`) VALUES(?,?)
                                            -
                                              -
                                            • Paeameter values:testuser,aaaaaa
                                            • -
                                            • Paeameter types:varchar,varchar
                                            • -
                                            • Query timeout(s):6
                                            • -
                                            • 添加查看结果树
                                            • -
                                            • 运行
                                            • + Regular Expression Extractor正则表达式处理器 + /posts/56883.html + 正则表达式规则
                                                +
                                              • ():括起来的部分是要提取的
                                              • +
                                              • .:匹配任何字符串
                                              • +
                                              • +:一次或多次
                                              • +
                                              • ?:在找到第一个匹配项后停止
                                              -

                                              运行结果ResponseBody:

                                              -
                                              1 updates.
                                              -

                                              这就配置成功

                                              +

                                              模板

                                              用$$引用起来,如果正则表达式中有多个正则表达式,可以是$3$$2$等,表示解析到的第几个值给title,$1$表示第一个

                                              +

                                              匹配数字

                                              0代表随机,1代表全部取值,通常使用0

                                              +

                                              缺省值

                                              若参数没有取到值,那默认给一个值让他取

                                              ]]>
                                              工具教程 @@ -2424,11 +1861,29 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for - Constant Timer定时器 - /posts/527.html - 作用

                                              就是loadrunner上面的思考时间,就是模拟真实用户操作过程的等待时间

                                              -

                                              生效范围

                                              定时器的父节点和子节点,如果想让一个请求强制停止一段时间,就把定时器放在这个请求的下面

                                              -

                                              单位是以ms为单位,1s=1000ms

                                              + Groovy编写方法 + /posts/22551.html + 关键字:
                                                +
                                              • **log**:写入信息到jmeterlog文件,使用方法:log.info(*Thisisloginfo
                                              • +
                                              • **ctx**:该变量引用了当前线程的上下文,使用方法可参考:org.apache.imeter.threads.JMeterContext。
                                              • +
                                              • vars-(JMeterVariables):操作imeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,
                                                常用方法:
                                                  +
                                                • a)vars.get(Stringkey):从imeter中获得变量值
                                                • +
                                                • b)vars.put(Stringkey,Stringvalue):数据存到imeter变量中
                                                  更多方法可参考:org.apache.imeter.threads.JMeterVariables
                                                • +
                                                +
                                              • +
                                              • props-(JMeterProperties-classjava.util.Properties):操作imeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
                                                对应于iava.util.Properties。
                                                  +
                                                • a)props.get(“START.HMS”); 注:START.HMS为属性名,在文件imeter.properties中定义
                                                • +
                                                • b)props.put(“PROP1”,”1234”);
                                                • +
                                                +

                                                +
                                              • +
                                              • prey-(SampleResult):获取前面的sample返回的信息,
                                                常用方法:
                                                  +
                                                • a)getResponseDataAsString():获取响应信息
                                                • +
                                                • b)getResponseCode():获取响应code
                                                  更多方法可参考:org.apache.imeter.samplers.SampleResult
                                                • +
                                                +
                                              • +
                                              • sampler-(Sampler):gives access to the current sampler
                                              • +
                                              ]]>
                                              工具教程 @@ -2438,660 +1893,1642 @@ Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be for
                                              - 循环控制器Loop Controller - /posts/48990.html - 作用

                                              指定子节点运行的次数,使用变量或数值进行控制

                                              + 使用moko编写测试接口 + /posts/1817691161.html + 编写规则
                                                +
                                              • []包裹着以{}包起来的接口脚本

                                                +
                                              • +
                                              • description:接口简介

                                                +
                                              • +
                                              • request:使用{}包含接口的请求信息

                                                  -
                                                • Infinite:表示一直循环
                                                • -
                                                • 如果同时设置线程组循环次数和循环控制器的循环次数,那控制器子节点运行的次数为两个数值相乘的结果
                                                • +
                                                • uri:接口的地址名称
                                                • +
                                                • method:请求方法
                                                • +
                                                • queries:get请求参数
                                                • +
                                                • forms:post请求参数
                                                • +
                                                • headers:请求头信息
                                                -

                                                添加

                                                ]]> - - 工具教程 - - - jmeter - - - - Modeule Controller和Include Controller - /posts/34250.html - Modeule Controller介绍]]> - - 工具教程 - - - jmeter - - - - 随机控制器Random Controller和Random Order Controller - /posts/29537.html - 作用
                                                  -
                                                • Random Controller:控制器子节点随机运行一个请求
                                                    -
                                                  • lgnore sub-controller blocks:忽略子控制器块
                                                  • + +
                                                  • response:返回的数据,使用{}

                                                    +
                                                      +
                                                    • text:返回的文字数据
                                                    • +
                                                    • cookies:返回的cookie信息
                                                    • +
                                                    • status:返回的响应码
                                                  • -
                                                  • Random Order Controller:控制器子节点随机运行全部请求
                                                  +

                                                  举个栗子demo

                                                  +
                                                  [
                                                  {
                                                  "description": "这是我们的第一个mock栗子",
                                                  "request": {
                                                  "uri": "/demo"
                                                  },
                                                  "response": {
                                                  "text": "第一个mock响应demo"
                                                  }
                                                  }
                                                  ]
                                                  +

                                                  get请求demo

                                                  +
                                                  [
                                                  {
                                                  "description": "接口的get请求",
                                                  "request": {
                                                  "uri": "/#/test/xml",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "text": "get请求接口"
                                                  }
                                                  }
                                                  ]
                                                  +

                                                  使用moko编写Get和Post测试接口

                                                  上一节已经写了规则,这次直接来编写Get和Post请求

                                                  +

                                                  模拟一个没有参数的get请求

                                                  +
                                                  {
                                                  "description": "模拟一个没有参数的get请求",
                                                  "request": {
                                                  "uri": "/getdemo",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "text": "这是一个没有参数的get请求"
                                                  }
                                                  }
                                                  +

                                                  模拟一个带参数的请求

                                                  +
                                                  {
                                                  "description": "模拟一个带参数的请求",
                                                  "request": {
                                                  "uri": "getwithparam",
                                                  "method": "get",
                                                  "queries": {
                                                  "name": "胡汉三",
                                                  "age": "18"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "我胡汉三又回来了!!!!!"
                                                  }
                                                  }
                                                  + +

                                                  模拟一个Post请求

                                                  +
                                                  {
                                                  "description": "模拟一个Post请求",
                                                  "request": {
                                                  "uri": "/postdemo",
                                                  "method": "post"
                                                  },
                                                  "response": {
                                                  "text": "这是我的第一个mosk的post请求"
                                                  }
                                                  }
                                                  + +

                                                  这是一个带参数的post请求

                                                  +
                                                  {
                                                  "description": "这是一个带参数的post请求",
                                                  "request": {
                                                  "uri": "/postwithparam",
                                                  "method": "post",
                                                  "forms": {
                                                  "name": "胡汉三",
                                                  "sex": "男人"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "我胡汉三带着参数来了!!!!"
                                                  }
                                                  }
                                                  + +

                                                  使用moko编写包含cookie信息的测试接口

                                                  这是一个会返回cookie的get请求

                                                  {
                                                  "description": "这是一个会返回cookie的get请求",
                                                  "request": {
                                                  "uri": "/getCookies",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "cookies": {
                                                  "login": "true"
                                                  },
                                                  "text": "恭喜你获得cookies信息成功",
                                                  "status": 200,
                                                  "msg": "成功"
                                                  }
                                                  }
                                                  + +

                                                  这是一个携带cookies信息的get请求

                                                  {
                                                  "description": "这是一个带cookies信息的get请求",
                                                  "request": {
                                                  "uri": "/get/with/cookies",
                                                  "method": "get",
                                                  "cookies": {
                                                  "login": "true"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "这是一个需要携带cookies信息才能访问的get请求"
                                                  }
                                                  }
                                                  + +

                                                  这是一个携带cookies信息的post请求

                                                  {
                                                  "description": "这是一个带cookies信息的post请求",
                                                  "request": {
                                                  "uri": "/post/with/cookies",
                                                  "method": "post",
                                                  "cookies": {
                                                  "login": "true"
                                                  },
                                                  "json": {
                                                  "name": "huhansan",
                                                  "age": "18"
                                                  }
                                                  },
                                                  "response": {
                                                  "status": 200,
                                                  "json": {
                                                  "huhansan": "success",
                                                  "status": "1"
                                                  }
                                                  }
                                                  }
                                                  +

                                                  重定向的测试接口

                                                    +
                                                  • 使用了redirectTo:目标地址
                                                  • +
                                                  +
                                                  [
                                                  {
                                                  "description": "重定向到百度",
                                                  "request": {
                                                  "uri": "/redirect"
                                                  },
                                                  "redirectTo": "http://www.baidu.com"
                                                  },
                                                  {
                                                  "description": "重定向到自己的网页上",
                                                  "request": {
                                                  "uri": "/redirect/topath"
                                                  },
                                                  "redirectTo": "/redirect/new"
                                                  },
                                                  {
                                                  "description": "这是被重定到的请求",
                                                  "request": {
                                                  "uri": "/redirect/new"
                                                  },
                                                  "response": {
                                                  "text": "重定向成功了"
                                                  }
                                                  }
                                                  ]
                                                  + +

                                                  下载jar包

                                                  点击moke选择版本进行下载,我下载的的是moco-runner-0.11.0-standalone.jar

                                                  +

                                                  使用命令启动测试脚本

                                                  java -jar jar包的存放路径 http -p 端口 -c json文件路径
                                                  + ]]> 工具教程 - jmeter + java - 逻辑控制器Simple Controller - /posts/31868.html - 作用

                                                  把多个请求放入Simple Controller,可以多个请求进行同时操作

                                                  + 使用Java解析Properties文件 + /posts/50581.html + 主要函数 + + + + + + + + + + + + + + + + + + + + + + +
                                                  文件后缀函数方法
                                                  .Propertiesload加载文件
                                                  setProperty设置
                                                  getProperty获取
                                                  +

                                                  编写逻辑

                                                  创建加载文件的方法

                                                  +
                                                  /**
                                                  * 加载文件
                                                  * @return Properties 对象
                                                  * @throws IOException I/O输入异常
                                                  */
                                                  private Properties readProperties() throws IOException{
                                                  // 实例化,创建 Properties 对象
                                                  Properties properties = new Properties();
                                                  try {
                                                  // 创建文件输入对象 FileInputStream("testpro.properties")
                                                  InputStream inputStream = new FileInputStream(filepath);
                                                  // 把文件输入对象放入缓存输入对象 new BufferedInputStream 里面
                                                  BufferedInputStream in = new BufferedInputStream(inputStream);
                                                  // 加载文件 in = ParseProperties.class.getResourceAsStream("testpro.properties"),自动获取 resources 文件夹下路径
                                                  properties.load(in);
                                                  }catch (IOException e){
                                                  e.printStackTrace();
                                                  }
                                                  return properties;
                                                  }
                                                  + +

                                                  获取key后面的数据

                                                  +
                                                  /**
                                                  * 获取数据
                                                  * @param key 数据名称
                                                  * @return 数据等号右边的值
                                                  * @throws Exception 异常
                                                  */
                                                  public String getPro(String key) throws Exception {
                                                  // 判断文件里面有没有这个 Key
                                                  if (prop.containsKey(key)) {
                                                  // 获得key后面的value值
                                                  return prop.getProperty(key);
                                                  }else {
                                                  System.out.println("你获取的key值不对");
                                                  return "";
                                                  }
                                                  }
                                                  + +

                                                  获取定位类型或者定位表达式

                                                  +
                                                  /**
                                                  * 返回定位类型或者定位表达式
                                                  * @param key 数据名称
                                                  * @param num 输入0/1
                                                  * @return num=0时,返回定位类型,num=1时,返回定位表达式
                                                  */
                                                  public String get_pro_element(String key, int num){
                                                  return (num!=0 & num!=1) ? "num:参数输入错误" : prop.getProperty(key).split("->")[num];
                                                  }
                                                  + ]]>
                                                  工具教程 - jmeter + java + Properties
                                                  - 事务控制器Transcation Controller - /posts/15488.html - 作用

                                                  一个事务会包含并请求,然后查看一个事务的QPS等性能指标

                                                  -

                                                  指标

                                                  QPS:每秒处理完请求的次数,具体指1s内发出请求到服务器处理完成并返回结果的次数

                                                  -

                                                  TPS:每秒处理完的事务次数,一般TPS是对整个系统来讲的,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能对应多个请求,对于衡量单个接口服务的处理能力,一般使用QPS

                                                  -

                                                  参数

                                                    -
                                                  • Generate Parent sample:生成父样例,就是控制器里面的请求不展示
                                                  • -
                                                  -

                                                  没有选中Generate Parent sample,运行后的结果是

                                                  + java基础之方法和函数 + /posts/7388.html + 方法和函数 + + + + + + + + + + + + + + + + + + + + +
                                                  定义方式作用调用方式
                                                  函数public static void 函数名(){}封装指定功能的代码块函数名()
                                                  方法public [static] void 方法名(){}类的行为,对象可以执行的一些功能对象名.方法名
                                                  +

                                                  定义函数

                                                  +

                                                  使用static修饰的内容成为静态的内容

                                                  +
                                                  +
                                                  public static void function1(){
                                                  }
                                                  + +

                                                  调用函数

                                                  function1()
                                                  + +

                                                  定义方法

                                                  public void class className1{

                                                  String name;
                                                  //静态变量
                                                  static String age;

                                                  //静态方法
                                                  public static function1(){
                                                  }

                                                  //类方法
                                                  //非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
                                                  public function2(){
                                                  }
                                                  }
                                                  +

                                                  调用方法

                                                    +
                                                  • 调用静态方法,不需要实例化
                                                  • +
                                                  +
                                                  className1.function1()
                                                  + +
                                                    +
                                                  • 调用方法
                                                  • +
                                                  +
                                                  className1的对象,需要实例化
                                                  + + +

                                                  静态方法注意事项:

                                                    +
                                                  • 静态方法无法直接引用非静态的变量
                                                  • +
                                                  • 静态方法不能直接调用非静态的方法
                                                  • +
                                                  +

                                                  代码块

                                                    +
                                                  • 定义在方法内部,和局部变量处于平行的位置
                                                  • +
                                                  • 生命周期随着方法的调用而加载,随着方法的结束而消亡
                                                  • +
                                                  • 可以在局部代码块中定义一些使用范围和时间都很短的变量,用完就消失啦
                                                  • +
                                                  +
                                                  public void class className1{

                                                  String name;
                                                  static String age;

                                                  //类方法
                                                  //非静态方法可以调用静态变量和非静态变量、静态方法和非静态方法
                                                  public void function2(){

                                                  //定义代码块
                                                  {
                                                  int i = 100;
                                                  System.out.println("方法中的变量i=" + i);
                                                  }

                                                  }
                                                  }
                                                  + +

                                                  构造代码块

                                                    +
                                                  • 构造代码快写在和构造方法平行的位置
                                                  • +
                                                  • 只要创建对象,构造代码块就会执行,不论是采用有参的还是无参数的构造方法
                                                  • +
                                                  +
                                                  public void class{
                                                  //有参构造
                                                  class(String name){
                                                  }
                                                  //无参构造
                                                  class(){
                                                  }
                                                  //构造代码块
                                                  {
                                                  int i=100;
                                                  System.out.println("构造代码块i=" + i);
                                                  }

                                                  }
                                                  +

                                                  静态代码块

                                                    +
                                                  • 被static修饰的代码块称为静态代码块
                                                  • +
                                                  • 随着类的加载而加载
                                                  • +
                                                  • 静态代码块只执行一次,在程序中可以完成加载驱动等只执行一次的操作
                                                  • +
                                                  +
                                                  public void className1{
                                                  static{
                                                  System.out.println("我是静态代码块i=" + i);
                                                  }
                                                  }
                                                  ]]>
                                                  + + 工具教程 + + + java + +
                                                  + + 包装类 + /posts/16468.html + +
                                                • 基本数据类型对应的包装类
                                                • +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                基本数据类型包装类大小(字节)
                                                byteByte1–(-128~127)
                                                shortShort2–(-32768~32767)
                                                intInteger4
                                                longLong8
                                                floatFloat4
                                                doubleDouble8
                                                charCharacter2
                                                booleanBoolean1
                                                +

                                                包装类方法

                                                  +
                                                • Integer的作用主要是对int、Integer、String几种类型的数据进行转换,还能获取一些常量
                                                • +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                方法描述
                                                compareTo()用于将对象与方法的参数进行比较(相同类型)
                                                decode()将方法的参数转为包装类对象
                                                equals()判断对象是否与参数相等
                                                Integer.parseInt(“字符串’)将字符串转为Int类型
                                                Integer.toString(int数据)将Int类型转为字符串
                                                +

                                                compareTo()方法

                                                  +
                                                • 如果指定的数与参数相等返回 0。
                                                • +
                                                • 如果指定的数小于参数返回 -1。
                                                • +
                                                • 如果指定的数大于参数返回 1。
                                                • +
                                                +]]>
                                                + + 工具教程 + + + java + +
                                                + + 字符串 + /posts/47564.html + 字符串的方法 + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                方法描述
                                                str.concat()将参数拼接到字符串上
                                                trim()去除字符串两端的字符串,不能去除中间
                                                replace(oldChar, newChar)将字符串的old参数替换为new参数
                                                length()返回此字符串的长度
                                                isEmpty()判断字符串是否为空
                                                +

                                                concat()方法

                                                  +
                                                • 返回字符串类型
                                                • +
                                                • 字符串在后面拼接
                                                  String str = "床前明月光";
                                                  String str1 = str.concat("疑是地上霜。");
                                                  System.out.println(str1);
                                                • +
                                                +

                                                trim()方法

                                                String str = "    床  前明   月光   ";
                                                String str1 = str.trim();
                                                System.out.println(str1);
                                                +

                                                replace(oldChar, newChar)方法

                                                String str = "床前明月光";
                                                String str1 = str.replace("床", "llll");
                                                System.out.println(str1);
                                                +

                                                length()方法

                                                  +
                                                • 返回int类型
                                                  String str = "床前明月光";
                                                  int str1 = str.length();
                                                  System.out.println(str1);
                                                • +
                                                +

                                                isEmpty()方法

                                                  +
                                                • 返回布尔类型
                                                  String str = "床前明月光";
                                                  boolean str1 = str.isEmpty();
                                                  System.out.println(str1);
                                                • +
                                                +]]>
                                                + + 工具教程 + + + java + +
                                                + + 抽象类与接口 + /posts/34655.html + 抽象类

                                                使用abstract修饰一个类,把这个类变成抽象类,抽象类不能直接创建对象,需要其他类进行继承该抽象类

                                                +
                                                  +
                                                • 抽象方法不能有方法体
                                                • +
                                                • 抽象方法必须使用abstract进行修饰,不能有方法体
                                                • +
                                                • 子类必须实现父抽象类的方法
                                                  public abstract class Ahsse {
                                                  String name;
                                                  int age;

                                                  //普通方法
                                                  public String aaa(){
                                                  return name;
                                                  };
                                                  // 抽象方法
                                                  public abstract String bbb();
                                                  }

                                                  class sss extends Ahsse{

                                                  @Override
                                                  public String bbb() {
                                                  System.out.println("实现抽象类的抽象方法");
                                                  return "ces ";
                                                  }
                                                  }
                                                • +
                                                +

                                                接口

                                                使用interface定义接口,相当于class

                                                +
                                                  +
                                                • 接口可以多继承
                                                • +
                                                • 变量全部默认使用public static final修饰,使用之前必须赋值
                                                • +
                                                • 类里面全部是抽象方法(默认使用public abstract修饰,没有方法体)需要被实现类进行实现
                                                • +
                                                • 接口可以被多实现–implements
                                                • +
                                                +]]>
                                                + + 工具教程 + + + java + +
                                                + + 继承、重写与重载 + /posts/55332.html + 继承

                                                继承是相对于类来说,通过关键字extends来实现

                                                +
                                                  +
                                                • 可以获取父类的属性和方法
                                                • +
                                                • 提高代码的复用性
                                                • +
                                                • 父类修改了内容,子类也会修改
                                                • +
                                                +

                                                调用

                                                父类的属性和方法

                                                +
                                                  +
                                                • this表示当前对象的引用
                                                • +
                                                • super表示父类对象的引用
                                                • +
                                                • 调用构造方法
                                                    +
                                                  • this(参数列表)表示调用当前类中的构造方法
                                                  • +
                                                  • super(参数列表)表示调用父类的构造方法,必须放在方法中的第一行
                                                  • +
                                                  +
                                                • +
                                                • 调用属性
                                                    +
                                                  • this.属性表示调用当前对象的属性
                                                  • +
                                                  • super.属性表示调用父类的属性,可以拿到被重写之前的数据
                                                  • +
                                                  +
                                                • +
                                                • 调用方法
                                                    +
                                                  • this.方法表示调用当前对象的方法
                                                  • +
                                                  • super.方法表示调用父类的方法,可以拿到被重写之前的方法,不用放在代码的第一行
                                                  • +
                                                  +
                                                • +
                                                +

                                                重写

                                                重写是子类可以重写父类的方法,使用override标识

                                                +
                                                  +
                                                • 方法名和参数不变,只修改方法体
                                                • +
                                                • 访问权限不能比父类的范围更小
                                                • +
                                                • 私有的方法能被子类继承,但不能使用和重写
                                                • +
                                                • 静态的方法能被子类继承,能使用但不能被重写
                                                  public class testeass {

                                                  public void aa(String name, int age){
                                                  System.out.println(name + age);
                                                  }
                                                  }

                                                  class testaaa extends testeass{

                                                  @Override
                                                  public void aa(String name, int age) {
                                                  System.out.println("这是重写方法,方法名、参数和返回数据都不变,只能修改方法体");
                                                  System.out.println(name + age);
                                                  }
                                                  }
                                                • +
                                                +

                                                重载

                                                重载是同一个类下对方法进行重载

                                                +
                                                  +
                                                • 方法名相同,参数不相同 (参数个数不同/参数类型不同/参数排列顺序不同)
                                                • +
                                                • 返回类型不限制
                                                  public class jichu {

                                                  // 原方法
                                                  public void hello(String name, int aa){
                                                  System.out.println("拼接起来的值是:"+ name + aa );
                                                  }

                                                  // 重载后的方法
                                                  public void hello(int aa, String name){
                                                  System.out.println("aaaaaaa:" + aa);
                                                  }
                                                  }
                                                • +
                                                +]]>
                                                + + 工具教程 + + + java + +
                                                + + Yaml的使用 + /posts/31621.html + 编写字符串
                                                #字符串
                                                #单行
                                                username: admin
                                                username1: "周杰\n伦" #双引号不转义
                                                username2: '周杰\n伦' ##单引号转义
                                                #多行
                                                william:



                                                william2: |




                                                william3: >



                                                + +

                                                回显的结果是:

                                                +
                                                { username: 'admin',
                                                username1: '周杰\n伦',
                                                username2: '周杰\\n伦',
                                                william: '一 二 三',
                                                william2: '一\n二\n三\n',
                                                william3: '一 二 三\n' }
                                                + +
                                                强制转换
                                                forceStr: !!str 123
                                                forceBoll: !!str true
                                                forceInt: !!int "123"
                                                + +

                                                回显的结果是:

                                                +
                                                forceStr: '123',
                                                forceBoll: 'true',
                                                forceInt: 123 }
                                                + +
                                                编写数组
                                                #数组
                                                myFavourite:
                                                - backaetball
                                                - football

                                                myFavourite2: ["bass","bahddd"]
                                                + +

                                                回显的结果是:

                                                +
                                                myFavourite: [ 'backaetball', 'football' ],
                                                myFavourite2: [ 'bass', 'bahddd' ],
                                                + +
                                                编写对象
                                                #对象
                                                autotest:
                                                username: root
                                                password: root
                                                age: 18
                                                male: true

                                                autotest2: [{username: admin, password: root, age: 22, male: false}]
                                                + +

                                                回显的结果是:

                                                +
                                                autotest: { username: 'root', password: 'root', age: 18, male: true },
                                                autotest2: [ { username: 'admin', password: 'root', age: 22, male: false } ],
                                                + +
                                                编写复合结构的
                                                #复合结构
                                                companies:
                                                -
                                                id: 1
                                                name: zhangsan
                                                value: 10e+11

                                                -
                                                id: 2
                                                name: lisi
                                                value: 10e+12


                                                websites:
                                                baidu: www.baidu.com
                                                google: www.google.com
                                                + +

                                                回显的结果是:

                                                +
                                                companies: 
                                                [ { id: 1, name: 'zhangsan', value: 1000000000000 },
                                                { id: 2, name: 'lisi', value: 10000000000000 } ],
                                                websites: { baidu: 'www.baidu.com', google: 'www.google.com' } }
                                                + +
                                                引用
                                                #引用
                                                father: &father_lastName
                                                lastName:

                                                son:
                                                <<: *father_lastName
                                                firstName:
                                                age: 18
                                                + +

                                                回显的结果是:

                                                +
                                                father: { lastName: '周' },
                                                son: { lastName: '周', firstName: '董', age: 18 } }
                                                + +]]>
                                                + + 工具教程 + + + yaml + +
                                                + + 使用Postman如何做接口测试 + /posts/20480.html + Postman安装
                                                +

                                                Postman下载:https://www.postman.com/downloads/

                                                +
                                                +

                                                image
                                                下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

                                                +

                                                postman主要功能说明

                                                postman主要模块功能介绍

                                                image
                                                点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
                                                image
                                                image
                                                image
                                                image
                                                创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
                                                image
                                                image

                                                +

                                                发送http请求和分析响应数据

                                                +

                                                在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
                                                请求的方法:get或post
                                                请求的URL:协议+域名/IP+端口+资源路径

                                                +
                                                +

                                                不带参数的请求:
                                                image
                                                发送需要认证的get接口:
                                                image

                                                +

                                                ------------恢复内容开始------------

                                                ## Postman安装 +> Postman下载:https://www.postman.com/downloads/ + +

                                                image
                                                下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

                                                +

                                                postman主要功能说明

                                                1、postman主要模块功能介绍

                                                image
                                                点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
                                                image
                                                image
                                                image
                                                image
                                                创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
                                                image
                                                image

                                                +

                                                发送http请求和分析响应数据

                                                +

                                                在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
                                                请求的方法:get或post
                                                请求的URL:协议+域名/IP+端口+资源路径

                                                +
                                                +

                                                get请求

                                                不带参数的请求:
                                                image
                                                发送需要认证的get接口:
                                                image

                                                +

                                                post请求

                                                选择请求格式为post
                                                传参:

                                                +
                                                  +
                                                • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
                                                • +
                                                • Body中Form-data:以表单的方式进行数据编辑
                                                • +
                                                • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
                                                • +
                                                • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.
                                                • +
                                                +

                                                Pre-request Scrip

                                                image

                                                +

                                                Tests

                                                image

                                                +

                                                postman保存测试用例

                                                image

                                                +

                                                postman批量运行

                                                image
                                                image

                                                +

                                                选择文件进行参数化

                                                json文件

                                                image

                                                +

                                                txt文件

                                                image
                                                使用参数时,变量名称要与文件里的变量名保持一致

                                                +

                                                postman环境管理

                                                image
                                                image
                                                引用环境信息:

                                                +

                                                postman全局变量

                                                image
                                                也可以用javascript写变量:
                                                image
                                                引用全局变量信息:
                                                image
                                                image
                                                Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
                                                image

                                                +

                                                关联

                                                ------------恢复内容结束------------

                                                +

                                                ------------恢复内容开始------------

                                                ## Postman安装 +> Postman下载:https://www.postman.com/downloads/ + +

                                                image
                                                下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。

                                                +

                                                postman主要功能说明

                                                1、postman主要模块功能介绍

                                                image
                                                点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用例都存放在这个目录之下,并且在根目录下还可以创建子目录进行用例的细分.
                                                image
                                                image
                                                image
                                                image
                                                创建了目录后可以进行用例的新建,具体是通过测试集右侧区域中的三个点来新增一个空的用例模板,当然也可以通过复制一个已有的用例来达到新建用例的目的.
                                                image
                                                image

                                                +

                                                发送http请求和分析响应数据

                                                +

                                                在postman中新建用例对应即将要执行的一次请求,默认为空,测试人员需要添加相应的请求信息,需要添加的信息包括:
                                                请求的方法:get或post
                                                请求的URL:协议+域名/IP+端口+资源路径

                                                +
                                                +

                                                get请求

                                                不带参数的请求:
                                                image
                                                发送需要认证的get接口:
                                                image

                                                +

                                                post请求

                                                选择请求格式为post
                                                传参:

                                                +
                                                  +
                                                • Body中raw:支持任意格式的数据编辑,选json(也可xml或html传参)
                                                • +
                                                • Body中Form-data:以表单的方式进行数据编辑
                                                • +
                                                • Body中x-www-form-urlencoded:与form-data类似,也是以表单的方式进行数据编辑,但是表单中的每一条数据只能是键值对.
                                                • +
                                                • Body中Binary:用来上传文件.并且由于没有键值,因此一次只能上传一个文件.
                                                • +
                                                +

                                                Pre-request Scrip

                                                image

                                                +

                                                Tests

                                                image

                                                +

                                                postman保存测试用例

                                                image

                                                +

                                                postman批量运行

                                                image
                                                image

                                                +

                                                选择文件进行参数化

                                                json文件

                                                image

                                                +

                                                txt文件

                                                image
                                                使用参数时,变量名称要与文件里的变量名保持一致

                                                +

                                                postman环境管理

                                                image
                                                image
                                                引用环境信息:

                                                +

                                                postman全局变量

                                                image
                                                也可以用javascript写变量:
                                                image
                                                引用全局变量信息:
                                                image
                                                image
                                                Cookie用途:一个请求需要用到用户的登录状态(sessionid或token),一般 登录状态会记录在cookie ,postman会自动记录登录状态写入cookies.所以执行非登录接口的请求前,需要先执行登录接口请求。
                                                image

                                                +

                                                关联

                                                断言

                                                Postman通过tests插入断言
                                                image

                                                +

                                                关联

                                                +

                                                把上一个接口的返回数据作为下一个参数的输入参数使用

                                                +
                                                +
                                                  +
                                                • 先发送一个接口,查看返回值
                                                • +
                                                • 在上一个接口的tests里面添加js脚本
                                                    +
                                                  • 获取上一个接口返回值并赋值给变量
                                                  • +
                                                  • 定义全局变量,并获取要作为下一个接口输入的数据字段
                                                  • +
                                                  +
                                                • +
                                                • 引用全局变量
                                                • +
                                                +

                                                生成并导出接口脚本

                                                导出接口测试脚本

                                                image

                                                +

                                                导出测试集

                                                image
                                                image

                                                +

                                                导入测试集

                                                image

                                                +]]>
                                                + + 工具教程 + + + postman + +
                                                + + 测试必会的sql基本操作 + /posts/11783.html + 1、创建数据库
                                                create database 数据库名;
                                                create database 数据库名 character set 字符集;
                                                + +
                                                2、查看全部的数据库
                                                show databases;   
                                                + +

                                                3、查看某个数据库的定义的信息:

                                                +
                                                show create database 数据库名;         
                                                + +
                                                4、删除数据库
                                                drop database 数据库名称;
                                                + +

                                                5、切换数据库:

                                                +
                                                use 数据库名;
                                                + +

                                                6、查看正在使用的数据库:

                                                +
                                                select database();          
                                                + +

                                                7、查看数据库中的所有表:

                                                +
                                                show tables;
                                                + +

                                                8、查看表结构:

                                                +
                                                desc 表名;    
                                                + +

                                                9、修改表删除列.

                                                +
                                                alter table 表名 drop 列名;            
                                                + +

                                                10、修改表名

                                                +
                                                rename table 表名 to 新表名;              
                                                + +

                                                11、修改表的字符集

                                                +
                                                alter table 表名 character set 字符集;
                                                + +

                                                12、数据类型与约束

                                                +
                                                  +
                                                • int :整数 有符号和无符号,长度不受限制
                                                • +
                                                • varchar:字符串 中文/数字/字母都是一字字符,受长度限制
                                                • +
                                                • decimal :小数 decimal(5,2)总长度5位,整数3位,小数2位
                                                • +
                                                • 主键 id :int unsigned primary key auto_increment
                                                • +
                                                • 非空 :not null
                                                • +
                                                • 唯一 :unique
                                                • +
                                                • 默认 :default
                                                • +
                                                +

                                                SQL中表的操作

                                                1、创建表

                                                create table 表名(字段名 类型 约束,.....)
                                                + +

                                                2、删除表

                                                drop table 表名
                                                drop table if exists 表名
                                                + +

                                                3、表数据操作

                                                3.1、添加数据
                                                insert into 表名 values(值1,值2...)给表中所有字段插入数据
                                                insert into 表名(字段2,字段1values(值2,值1
                                                + +
                                                3.2、修改数据
                                                update 表名 set 字段1=1,字段2=2 where 条件
                                                isdelete 逻辑删除
                                                + +
                                                3.3、删除数据
                                                delete from 表名 where 条件
                                                + +
                                                3.4、查询数据
                                                  +
                                                • 3.4.1、查询表中所有信息
                                                  select * from 表名 where 条件
                                                  +
                                                • +
                                                • 3.4.2、查询表中指定字段
                                                  select 字段1,字段2,字段3...from 表名 where 条件
                                                  +
                                                • +
                                                • 3.4.3、给字段取别名
                                                  select 字段1as) 别名,字段2 别名 from 表名 where 条件
                                                  +
                                                • +
                                                • 3.4.4、去重
                                                  select distinct 字段 from 表名 where 条件
                                                  +
                                                • +
                                                • 3.4.5、比较运算符
                                                  select * from 表名 where age>20
                                                  +
                                                • +
                                                • 3.4.6、逻辑运算符
                                                    +
                                                  • and 满足所有条件

                                                    +
                                                  • +
                                                  • or 满足其中任意一个条件

                                                    +
                                                  • +
                                                  • not 不满足条件

                                                    +
                                                  • +
                                                  +
                                                • +
                                                • 3.4.7、模糊查询
                                                    +
                                                  • like
                                                  • +
                                                  • % 0到任意多个字符
                                                  • +
                                                  • _表示任意一个字符
                                                  • +
                                                  +
                                                • +
                                                • 3.4.8、范围查询
                                                    +
                                                  • in 在一个非连续的范围内
                                                  • +
                                                  • between and 在一个连续的范围内 闭区间 小的数据在前
                                                  • +
                                                  +
                                                • +
                                                • 3.4.9、空查询
                                                    +
                                                  • is null
                                                  • +
                                                  • ‘’空字符串
                                                  • +
                                                  +
                                                • +
                                                +
                                                3.5、多表查询
                                                  +
                                                • 3.5.1、排序

                                                  +
                                                  select * from 表名 where 条件 order by1asc|desc,列2 asc|desc
                                                  select * from student where 条件 order by convert(字段 using gbk)asc|desc 纯中文转换后排序
                                                  +
                                                • +
                                                • 3.5.2、聚合函数

                                                  +
                                                  count: 总数 select count(*/字段)from 表名 where 条件 
                                                  max: 最大值 select max(age) from 表名 where 条件
                                                  min: 最小值 select min(age) from 表名 where 条件
                                                  avg: 平均值 select avg(grade) from 表名 where 条件
                                                  sum: 求和 select sum(grade) from 表名 where 条件
                                                  select avg(age)as 平均年龄,max(age)最大年龄,min(age)最小年龄 from 表名 where 条件
                                                  +
                                                • +
                                                • 3.5.3、分组

                                                  +
                                                  select * from 表名 group by 字段,字段2 having 条件
                                                  +
                                                • +
                                                • 3.5.4、分页

                                                  +
                                                  select * from 表名 limit 05 从第一行数据开始,显示5
                                                  select * from 表名 limit (n-1*m,m n代表第几页,m代表每页显示多少条数据
                                                  +
                                                • +
                                                • 3.5.5、等值连接

                                                  +
                                                  方式一 :
                                                  select * from1,表2,表3 where1.=2.and2.=3.where 条件
                                                  方式二 内连接 取交集:
                                                  select * from1 inner join2 on1.=2.inner join3 on2.=3.where 条件
                                                  +
                                                • +
                                                • 3.5.6、左连接

                                                  +
                                                  +

                                                  左边的表全显示,右边表能匹配的上的数据连接显示,匹配不上(没有的)以null补充

                                                  +
                                                  +
                                                  select * from1 left join2 on1.=2.left join3 on2.=3.where 条件
                                                  +
                                                • +
                                                • 3.5.7、右连接

                                                  +
                                                  +

                                                  右边的表全显示,左边表能匹配上的数据连接显示,匹配不上(没有的)以null补充

                                                  +
                                                  +
                                                  select * from1 right join2 on1.=2.right join3 on2.=3.where 条件
                                                  +
                                                • +
                                                • 3.5.8、自关联

                                                  +
                                                  select * from 表 别名1 inner join 表 别名2 on 别名1.aid=别名2.pid
                                                  +
                                                • +
                                                • 3.5.9、子查询
                                                    +
                                                  • 标量子查询
                                                  • +
                                                  +
                                                  +

                                                  子查询结果输出的是一行一列

                                                  +
                                                  +
                                                  select * from student where age>(select avg(age) from student)
                                                  + +
                                                    +
                                                  • 列子查询
                                                  • +
                                                  +
                                                  +

                                                  子查询的结果输出的是一列多行

                                                  +
                                                  +
                                                  in:  
                                                  select * from student where age in
                                                  (select age from student where age=18)

                                                  any/some: >:大于最小的; <: 小于最大的
                                                  select * from student where age>/< any
                                                  (select age from student where age between 18 and 22)

                                                  all: >:大于最大的; <: 小于最小的
                                                  select * from student where age>/<all
                                                  (select age from student where age between 18 and 22
                                                  + +
                                                    +
                                                  • 行子查询
                                                  • +
                                                  +
                                                  +

                                                  子查询的结果输出的是一行多列

                                                  +
                                                  +
                                                  select * from student where(name,sex)=select name,sex from student where sex='男' order by age desc limit 1
                                                  + +
                                                    +
                                                  • 表子查询
                                                  • +
                                                  +
                                                  +

                                                  子查询的输出结果是一个表

                                                  +
                                                  +
                                                  select * from scores inner joinselect cno from courses where cname in('数据库',‘系统测试’) as c on scores.cno=c.cno
                                                • +
                                                +
                                                3.6、数据分表
                                                insert into goods_cate(cate_name) select distinct cate from goods;

                                                create table goods_cate (id int unsigned primary key auto_incremen,cate varchar(10)) select distinct cate from goods;

                                                update goods inner join goods_cate on goods_cate.cate=goods.cate set goods.cate=goods_cate.id
                                                ]]>
                                                + + 工具教程 + + + sql + +
                                                + + 性能测试主要关注点 + /posts/32473.html + 性能关注点

                                                接口响应时间

                                                +

                                                吞吐量

                                                +

                                                TPS: 事务处理能力,每秒处理事务数(打开页面、登录、选择商品、加入购物车、下单、付款)

                                                +

                                                注意:“日活” 每日活跃用户数,是运营数据,与性能无关

                                                +

                                                八二原则

                                                +
                                                +

                                                计算QPS/TPS

                                                +
                                                +

                                                相信80%会集中在20%时间内,24小时的流量集中在白天8小时内,同时在午高峰达到高峰

                                                +

                                                举个栗子

                                                根据相应耗时计算公式预估所需并发,一次请求100ms

                                                +

                                                根据 QPS = Vue * Rt

                                                +

                                                1000000 * 80% / 8 * 3600 * 20% = 277 QPS

                                                +

                                                需要27个并发

                                                +]]>
                                                + + 经验分享 + + + 性能测试 + +
                                                + + 关闭chrome浏览器自动更新 + /posts/43612.html + 屏蔽谷歌的更新服务器
                                                修改 "C:\Windows\System32\drivers\etc\host 文件,在最后增加
                                                + +

                                                修改C:\Windows\System32\drivers\etc\hosts文件,在最后增加

                                                +
                                                127.0.0.1 update.googleapis.com
                                                + +

                                                保存后win+r,输入CMD,输入ipconfig /flushdns刷新DNS

                                                +

                                                然后重启浏览器

                                                +]]>
                                                + + 工具教程 + +
                                                + + 自动化基础之Xpath定位 + /posts/43613.html + 常用函数定位 + + + + + + + + + + + + + + +
                                                定位函数position
                                                //*contains(text(),’文字’)/li[position()=3]找到第三个 li
                                                //*contains(text(),’文字’)/li[position()<=2]找到前两个 li
                                                +
                                                Xpath函数进行定位
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                定位方式描述实例
                                                contains匹配在元素文本中查找包含 ‘文字’ 的元素//*contains(text(),’文字’)
                                                starts-with匹配所有id开头为 ‘s’ 的元素//*[starts-with(@id,’s’)]
                                                ends-with匹配所有id结尾头为 ‘s’ 的元素//*[ends-with(@id,”s”)]
                                                following-sibling匹配和 ‘ul’ 元素同级别的下一个元素//div/following-sibling::ul
                                                preceding-sibling匹配当前节点之前的所有同级节点
                                                ancestor匹配当前节点的所有父级,祖父级还有更高级//div/ancestor::li[@role=”menuitem”]
                                                parent匹配当前节点的父节点,相当于 ..//div/parent::button
                                                +]]>
                                                + + 工具教程 + + + xpath + +
                                                + + 使用docker的ubuntu容器安装code-server + /posts/7272.html + 搭建code-server

                                                拉取Ubuntu 镜像

                                                # 拉取镜像
                                                docker pull aliyun
                                                # 进入镜像
                                                docker run --name [自定义名称] -u root --privileged=true -p 3300:8881 -v /opt/testubuntu/:/opt/main_file -it [镜像id]
                                                +

                                                安装code-server

                                                github上下载安装包,解压后剪切到/home目录

                                                +

                                                运行code-server

                                                # 找到bin目录下的code-server*
                                                cd /home/code-server/bin
                                                # 输入运行命令
                                                export PASSWORD="123456" && ./code-server --host 0.0.0.0 --port 8881
                                                + +

                                                然后在浏览器输入http://ip:3000查看搭建情况

                                                +

                                                但是这样搭建有问题

                                                +
                                                +

                                                使用上面方法部署的code-server,因为是http的,导致一些功能不好用,比如写md文档无法预览

                                                +
                                                +

                                                下面就是配置使用https运行

                                                +

                                                配置HTTPS

                                                +

                                                使用openssl为IP签发证书

                                                +
                                                +

                                                安装openssl

                                                一般的linux系统已经内置openssl,可以输入openssl进行查看,没有的话就需要安装

                                                +

                                                创建证书请求文件

                                                新建openssl.cnf,并编辑如下内容

                                                +
                                                [req]
                                                distinguished_name = req_distinguished_name
                                                req_extensions = v3_req

                                                [req_distinguished_name]
                                                countryName = Country Name (2 letter code)
                                                countryName_default = CH
                                                stateOrProvinceName = State or Province Name (full name)
                                                stateOrProvinceName_default = ZJ
                                                localityName = Locality Name (eg, city)
                                                localityName_default = HangZhou
                                                organizationalUnitName = Organizational Unit Name (eg, section)
                                                organizationalUnitName_default = THS
                                                commonName = Internet Widgits Ltd
                                                commonName_max = 64

                                                [ v3_req ]
                                                # Extensions to add to a certificate request
                                                basicConstraints = CA:FALSE
                                                keyUsage = nonRepudiation, digitalSignature, keyEncipherment
                                                subjectAltName = @alt_names

                                                [alt_names]

                                                # 改成自己的域名
                                                # DNS.1 = your_domain_name.com

                                                # 改成自己的ip
                                                IP.1 = 8.142.144.75
                                                IP.2 = 0.0.0.0
                                                + +

                                                生成私钥

                                                san_domain_com 为最终生成的文件名,一般以服务器命名,可改。

                                                +
                                                openssl genrsa -out san_domain_com.key 2048
                                                + +

                                                生成CSR文件

                                                openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf
                                                + +

                                                执行后,系统提示输入组织等信息,按[]内容提示输入如即可。

                                                +

                                                需要测试CSR文件是否生成成功

                                                +
                                                > openssl req -text -noout -in san_domain_com.csr
                                                +

                                                有下面的信息,说明生成成功

                                                +
                                                Certificate Request:
                                                Data:
                                                Version: 0 (0x0)
                                                Subject: C=US, ST=MN, L=Minneapolis, OU=Domain Control Validated, CN=zz
                                                Subject Public Key Info:
                                                Public Key Algorithm: rsaEncryption
                                                Public-Key: (2048 bit)
                                                //...
                                                + +

                                                自签名并生成证书

                                                openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf
                                                +

                                                在当前目录会生成三个文件

                                                +
                                                san_domain_com.crt

                                                san_domain_com.csr

                                                san_domain_com.key
                                                + +

                                                在用户电脑安装证书

                                                .crt证书发给用户,用户双击进行安装,然后重启浏览器

                                                +

                                                code server启动

                                                在code-server的bin目录下运行如下命令,设置端口号为8881,指定对应生成的crt和key密钥文件,即可正常访问https域名

                                                +
                                                # 给ssh创建密码
                                                export PASSWORD="123456"
                                                # 启动ssh
                                                nohup ./code-server --port 8881 --host 0.0.0.0 --cert ../san_domain_com.crt --cert-key ../san_domain_com.key > vscode.log 2>&1 &
                                                +

                                                然后通过浏览器访问https://ip:3000

                                                +]]>
                                                + + 工具教程 + + + ubuntu + +
                                                + + 性能监控平台 + /posts/23767.html + 搭建容器
                                                +

                                                拉取CentOS7镜像,下载安装Grafana和Influxdb

                                                +
                                                +
                                                
                                                +        # 拉取阿里云的centos7镜像
                                                +        git pull registry.cn-zhangjiakou.aliyuncs.com/ggls/centos:7.1
                                                +        # 运行镜像生成容器
                                                +        docker run -itd --name centos7-influx 
                                                +        -p 8083:8083 -p 8086:8086 
                                                +        -p 2003:2003 -p 3000:3000 
                                                +        -v /opt/centos7_influx:/opt 
                                                +        --privileged=true 
                                                +        registry.cn-zhangjiakou.aliyuncs.com/ggls/centos:7.1 /usr/sbin/init
                                                +        # 进入容器
                                                +        docker exec -it centos7-influx bash
                                                +    
                                                +
                                                +

                                                端口说明:

                                                +
                                                  +
                                                • 8083:InfluxDB的UI界面展示的端口
                                                • +
                                                • 8086:Grafana用来从数据库取数据的端口
                                                • +
                                                • 2003:Jmeter往数据库发数据的端口
                                                • +
                                                • 3000:本地访问服务器内部docker容器的端口
                                                • +
                                                +

                                                安装Influxdb

                                                  +
                                                1. 下载influxDB
                                                2. +
                                                +

                                                新版本可以点击influxDB官网进行下载

                                                + + # 下载安装包 + wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm + # 安装运行 + yum localinstall influxdb-1.6.3.x86_64.rpm + + + +
                                                  +
                                                1. influxDB配置
                                                2. +
                                                +

                                                安装运行后,然后对influxDB进行配置,主要是配置Jmeter连接的数据库和端口号

                                                + + vim /etc/influxdb/influxdb.conf + + +

                                                找到graphite并且修改它的库与端口

                                                +
                                                enabled = true
                                                database = "jmeter"
                                                retention-policy = ""
                                                bind-address = ":2003"
                                                protocol = "tcp"
                                                consistency-level = "one"
                                                +
                                                  +
                                                1. 找到[http],将前面的#号去掉
                                                2. +
                                                +
                                                + +
                                                + +
                                                  +
                                                1. 配置成功,启动influxDB
                                                2. +
                                                +
                                                  +
                                                • 启动命令: systemctl start influxdb.service
                                                • +
                                                • 查看状态命令: systemctl status influxdb.service
                                                • +
                                                +
                                                + +
                                                + +

                                                安装Grafana

                                                新版本下载位置:Grafana官网下载:https://grafana.com/grafana/download

                                                +
                                                wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm

                                                sudo yum localinstall grafana-6.5.2-1.x86_64.rpm
                                                +

                                                然后启动

                                                启动命令: systemctl start grafana-server.service

                                                +

                                                查看状态命令: systemctl status grafana-server.service

                                                +

                                                然后在浏览器访问登录http://ip:3000

                                                +

                                                配置Jmeter

                                                一、添加监听器:Backend Listener

                                                  +
                                                • 右键点击Thread Group
                                                • +
                                                • 点击Add -> Listener -> Backend Listener
                                                • +
                                                +

                                                二、配置监听器:Backend Listener

                                                Backend Listener implementation 默认选择GraphiteBackendListenerClient

                                                +
                                                  +
                                                • graphiteHost:InfluxDB安装的服务器的ip
                                                • +
                                                • graphitePort:端口;默认就是2003,除非你自己安装InfluxDB时设置了其他端口是哦(可见上面安装InfluxDB后关于graphite的配置)
                                                • +
                                                • rootMetricsPrefix:指标的根前缀;将测试结果存入数据库时,不同指标会生成不同表,但这些表都最好要有一个共同的前缀,这个就是了;后面会讲到不同的指标的含义(重点哦)
                                                • +
                                                • summaryOnly:当你线程组有多个请求又想知道每个请求的结果数据时,最好填false,因为true只会返回所有请求的集合数据报告,不会输出每条请求的数据报告
                                                • +
                                                • samplersList:取样器列表;想收集哪些请求就填哪些,最好用正则去匹配,减轻工作量
                                                • +
                                                • useRegexpForSamplersList:是否使用正则;如果true则使用,samplersList里可以匹配正则表达式
                                                • +
                                                • percentiles:百分比;即类似聚合报告里90% Line,95% Line,99% Line的数据;倘若想要99.9时,需要写成【99_9】,用下划线代替点
                                                • +
                                                +

                                                三:运行Jmeter脚本,查看数据库

                                                数据库里面有两个库,jmeter库就是jmeter运行生成表的数据库

                                                +

                                                可以看到生成了三类前缀的表,分别是: jmeter.all 、 jmeter.[请求名称];最后还有 jmeter.test 开头的表,这个后面会单独拿出来说

                                                +

                                                前缀的含义

                                                +
                                                  +
                                                • jmeter.all :代表了所有请求;当summaryOnly=true时,就只有samplerName=all的表了
                                                • +
                                                • jmeter.[请求名称]:代表了HTTP请求,即samplerName=[请求名称]
                                                • +
                                                +

                                                Thread/Virtual Users metrics - 线程/虚拟用户指标
                                                跟线程组设置相关的

                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                指标全称含义
                                                jmeter.test.minATMin active threads最小活跃线程数
                                                jmeter.test.maxATMax active threads最大活跃线程数
                                                jmeter.test.meanATMean active threads平均活跃线程数
                                                jmeter.test.startedTStarted threads启动线程数
                                                jmeter.test.endedTFinished threads结束线程数
                                                +

                                                Response times metrics - 响应时间指标

                                                +

                                                划重点:每个sampler(请求)都包含了所有响应时间指标,每个sampler(请求)的每个指标都会有单独的一个表存储结果数据

                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                指标含义
                                                .ok.countsampler的成功响应数
                                                .h.count服务器每秒命中次数(每秒点击数,即TPS)
                                                .ok.minsampler响应成功的最短响应时间
                                                .ok.maxsampler响应成功的最长响应时间
                                                .ok.avgsampler响应成功的平均响应时间
                                                .ok.pctsampler响应成功的所占百分比
                                                .ko.countsampler的失败响应数
                                                .ko.minsampler响应失败的最短响应时间
                                                .ko.maxsampler响应失败的最长响应时间
                                                .ko.avgsampler响应失败的平均响应时间
                                                .ko.pctsampler响应失败的所占百分比
                                                .a.countsampler响应数(ok.count+ko.count)
                                                .sb.bytes已发送字节
                                                .rb.bytes已接收字节
                                                .a.minsampler响应的最短响应时间(ok.count和ko.count的最小值)
                                                .a.maxsampler响应的最长响应时间(ok.count和ko.count的最大值)
                                                .a.avgsampler响应的平均响应时间(ok.count和ko.count的平均值)
                                                .a.pctsampler响应的百分比(根据成功和失败的总数来计算)
                                                +

                                                四、配置Grafana

                                                步骤:

                                                +
                                                  +
                                                • 配置数据源

                                                  +
                                                • +
                                                • 创建数据面板

                                                  +
                                                • +
                                                +
                                                + +
                                                + +

                                                配置数据源

                                                点击首页的Create your first data source,然后进行配置

                                                +
                                                + +
                                                + +

                                                点击选择influxDB

                                                +
                                                + +
                                                +
                                                - + +
                                                + +

                                                配置数据面板

                                                +
                                                + +

                                                选择Add Query,然后进行配置

                                                - +
                                                -选中后`Generate Parent sample`,运行后的结果是 + +

                                                当我们只想看数据而不想看数据趋势图的话,可以改变它的类型;

                                                +

                                                在同一个界面,点击左侧列表选中第二个icon,然后选择Singlestat即可

                                                - +
                                                + +

                                                基本的配置完成,Jmeter使用GraphiteBackendListenerClient来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加;后面将会介绍如何通过InfluxDBBackendListenerClient来采集数据

                                                +

                                                给Jmeter的Backend Listener配置为InfluxDBBackendListenerClient

                                                +

                                                首先来看看每个配置项的含义

                                                +
                                                  +
                                                1. influxdbUrl:安装influxdb的路径;主要格式:http://主机地址:8086/write?db=数据库名
                                                2. +
                                                3. application:应用名称;在 events 表中对应的字段是 application
                                                4. +
                                                5. measurement:表名;数据存储到哪个表,默认是jmeter,不用改即可
                                                6. +
                                                7. summaryOnly:同GraphiteBackendListenerClient
                                                8. +
                                                9. samplersRegex:同GraphiteBackendListenerClient
                                                10. +
                                                11. percentiles:同GraphiteBackendListenerClient
                                                12. +
                                                13. testTitle:测试名称;在 events 表中对应的字段是 text ,JMeter在测试的开始和结束时自动生成注释,该注释的值以’start’和’end’结尾
                                                14. +
                                                15. eventTags:Grafana允许为每个注释显示标签;在 events 表中对应的字段是 tags
                                                16. +
                                                +

                                                inDB数据库
                                                使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表:

                                                +

                                                events :主要拿存事件的

                                                +

                                                jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示

                                                +

                                                配置数据面板

                                                +

                                                首先,进入官方模板库: https://grafana.com/dashboards ,然后跟着图片导入模板并初始化即可

                                                - +
                                                +
                                                + +
                                                -]]>
                                                - - 工具教程 - - - jmeter - -
                                                - - 逻辑控制器If Controller - /posts/12932.html - 逻辑控制器If Controller]]> - - 工具教程 - - - jmeter - - - - Constant Throughput Timer定时器 - /posts/48851.html - 作用

                                                限制整个运行过程中的生成的吞吐量不要超过某一个值,防止压死系统

                                                -

                                                参数

                                                  -
                                                • Target throughput(in samples per minute):目标吞吐量,指的是每分钟发送的请求数,对应测试要求的20 QPS,这里应该输入1200
                                                • -
                                                • Calculate Throughput based on:有5个选项
                                                    -
                                                  • This Thread only:控制每个线程的吞吐量,这个模式的作用是:总的吞吐量=Target throughput * 线程的数量
                                                  • -
                                                  • All active threads:设置的Target throughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理时间后再次运行。活跃线程指的是同一时刻同时运行的线程
                                                  • -
                                                  • All active threads in current thread group:设置的`Target throughput将分配在当前线程祖的每一个活跃线程上,当测试计划只有一个线程组,这个模式作用和All active threads一样
                                                  • -
                                                  • All active threads(shared):与All active threads选项基本一致,唯一区别是,每一个活跃线程都会在所有活跃线程上一次运行结束后等待合理时间再次运行
                                                  • -
                                                  • All active threads in current thread group(shared):与All active threads in current thread group选项基本一致,唯一区别是,每个活跃线程都会在所有活跃线程的上一次运行结束等待合理的时间后再次运行
                                                  • -
                                                  +
                                                  + +
                                                  + +
                                                  + +
                                                  + +

                                                  然后jmeter再次执行一下测试计划

                                                  +
                                                  + +
                                                  + +

                                                  模板自带了三个下拉筛选框

                                                  +
                                                    +
                                                  1. data_source:数据源,在Grafana配置了多少个就显示多少个

                                                  2. -
                                                -]]>
                                                - - 工具教程 - - - jmeter - -
                                                - - Gaussian Random Timer定时器 - /posts/40953.html - 作用

                                                生成随机等待时间

                                                -

                                                参数

                                                  -
                                                • Deviation(in milliseconds) :高斯定时器参数,随机的
                                                • -
                                                • Constant Delay Offset(in milliseconds):固定等待时长
                                                • -
                                                -

                                                生成的时长是Deviation + Constant Delay Offset

                                                +
                                              • application:在Jmeter配置好的application,如果每次测试计划执行时的application都不一样,你就可以通过这个筛选出对应测试时机的结果数据了

                                                +
                                              • +
                                              • transaction:在Jmeter配置好的sampleList,譬如我只发了get、post请求,这里就只会给你选get、post;可以滑到页面下面看到针对某个请求的数据展示

                                                +
                                              • + +

                                                卸载Grafana

                                                停止Grafana服务。

                                                +
                                                systemctl stop grafana-server.service
                                                +
                                                systemctl disable grafana-server.service
                                                +

                                                查看要卸载的包的名称

                                                +
                                                yum list installed
                                                +

                                                输入命令行卸载Grafana

                                                +
                                                yum remove grafana.x86_64
                                                + ]]> 工具教程 - jmeter + 监控 - Groovy编写方法 - /posts/22551.html - 关键字:
                                                  -
                                                • **log**:写入信息到jmeterlog文件,使用方法:log.info(*Thisisloginfo
                                                • -
                                                • **ctx**:该变量引用了当前线程的上下文,使用方法可参考:org.apache.imeter.threads.JMeterContext。
                                                • -
                                                • vars-(JMeterVariables):操作imeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,
                                                  常用方法:
                                                    -
                                                  • a)vars.get(Stringkey):从imeter中获得变量值
                                                  • -
                                                  • b)vars.put(Stringkey,Stringvalue):数据存到imeter变量中
                                                    更多方法可参考:org.apache.imeter.threads.JMeterVariables
                                                  • -
                                                  + 硬件性能监控平台 + /posts/2166.html + 拉取prometheus镜像
                                                  docker pull prom/prometheus
                                                  +

                                                  创建prometheus容器并启动

                                                  docker run -itd --name=docker_prometheus --restart=always -p 3090:9090 -v /opt/prometheus:/ prom/prometheus
                                                  +

                                                  验证

                                                  +

                                                  通过浏览器访问http://ip:3090进行访问

                                                  +

                                                  方法一:服务器上直接安装node_export

                                                  首先,用浏览器访问:node_export 下载,然后上传到被监控的服务器并解压
                                                  进入解压文件夹,直接启动./node_exporter

                                                  +

                                                  方法二:拉取docker node_export镜像

                                                  docker pull prom/node-exporter
                                                  + +

                                                  创建node_export容器并启动

                                                  docker run -itd --name=node-exporter \
                                                  --restart=always \
                                                  -p 9100:9100 \
                                                  -v "/proc:/host/proc:ro" \
                                                  -v "/sys:/host/sys:ro" \
                                                  -v "/:/rootfs:ro" \
                                                  prom/node-exporter
                                                  + +

                                                  验证

                                                  +

                                                  在浏览器访问http://ip:9100/metrics进行访问

                                                  +

                                                  配置prometheus + node_export

                                                  node_export的作用收集硬件数据

                                                  +

                                                  使用vim修改yum文件容器内:/etc/prometheus/prometheus.yml

                                                  +
                                                  scrape_configs:
                                                  - job_name: prometheus
                                                  static_configs:
                                                  - targets: ['localhost:9090']
                                                  labels:
                                                  instance: prometheus

                                                  - job_name: linux
                                                  static_configs:
                                                  - targets: ['被监控的服务器ip:9100']
                                                  labels:
                                                  instance: localhost
                                                  + +

                                                  重启prometheus容器

                                                  docker restart docker_prometheus
                                                  + +

                                                  配置Grafana

                                                  使用Grafana下载版本

                                                  +

                                                  配置数据源

                                                    +
                                                  • 数据源:选择prometheus

                                                  • -
                                                  • props-(JMeterProperties-classjava.util.Properties):操作imeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
                                                    对应于iava.util.Properties。
                                                      -
                                                    • a)props.get(“START.HMS”); 注:START.HMS为属性名,在文件imeter.properties中定义
                                                    • -
                                                    • b)props.put(“PROP1”,”1234”);
                                                    • -
                                                    -

                                                    +
                                                  • URL输入http://prometheus机器ip:3090

                                                  • -
                                                  • prey-(SampleResult):获取前面的sample返回的信息,
                                                    常用方法:
                                                      -
                                                    • a)getResponseDataAsString():获取响应信息
                                                    • -
                                                    • b)getResponseCode():获取响应code
                                                      更多方法可参考:org.apache.imeter.samplers.SampleResult
                                                    • -
                                                    +
                                                  • 点击Save & Test保存

                                                  • -
                                                  • sampler-(Sampler):gives access to the current sampler
                                                  +

                                                  添加仪表盘

                                                  使用官方仪表盘进行下载仪表盘
                                                  导入仪表盘
                                                  import via grafana.com输入框输入模板ID12884

                                                  +

                                                  ID:12633也可以使用。

                                                  +

                                                  点击 load,然后底部选择刚弄的数据源,点击import

                                                  +

                                                  注意:
                                                  点击json下载12884的json文件

                                                  ]]>
                                                  工具教程 - jmeter + 监控 - Regular Expression Extractor正则表达式处理器 - /posts/56883.html - 正则表达式规则
                                                    -
                                                  • ():括起来的部分是要提取的
                                                  • -
                                                  • .:匹配任何字符串
                                                  • -
                                                  • +:一次或多次
                                                  • -
                                                  • ?:在找到第一个匹配项后停止
                                                  • -
                                                  -

                                                  模板

                                                  用$$引用起来,如果正则表达式中有多个正则表达式,可以是$3$$2$等,表示解析到的第几个值给title,$1$表示第一个

                                                  -

                                                  匹配数字

                                                  0代表随机,1代表全部取值,通常使用0

                                                  -

                                                  缺省值

                                                  若参数没有取到值,那默认给一个值让他取

                                                  + Shell脚本初探 + /posts/38168.html + 编写shell脚本时,必须以 #! /bin/bash 开头

                                                  在linux创建helloworld.sh文件,在文件内输入:

                                                  +
                                                  #!/bin/bash
                                                  #################
                                                  echo "hello World"
                                                  + +

                                                  然后保存该文件

                                                  +

                                                  运行.sh文件时,有两种方法可以运行

                                                  +
                                                  第一种是给该文件添加可执行权限
                                                  chmod +x ./helloworld.sh
                                                  + +

                                                  运行文件:./ 不能省略

                                                  +
                                                  ./helloworld.sh
                                                  + +
                                                  第二种是使用bash或sh 文件路径运行该文件
                                                  bash helloworld.sh
                                                  #
                                                  sh helloworld.sh
                                                  ]]>
                                                  工具教程 - jmeter + shell
                                                  - 使用moko编写测试接口 - /posts/1817691161.html - 编写规则
                                                    -
                                                  • []包裹着以{}包起来的接口脚本

                                                    -
                                                  • -
                                                  • description:接口简介

                                                    -
                                                  • -
                                                  • request:使用{}包含接口的请求信息

                                                    -
                                                      -
                                                    • uri:接口的地址名称
                                                    • -
                                                    • method:请求方法
                                                    • -
                                                    • queries:get请求参数
                                                    • -
                                                    • forms:post请求参数
                                                    • -
                                                    • headers:请求头信息
                                                    • -
                                                    -
                                                  • -
                                                  • response:返回的数据,使用{}

                                                    -
                                                      -
                                                    • text:返回的文字数据
                                                    • -
                                                    • cookies:返回的cookie信息
                                                    • -
                                                    • status:返回的响应码
                                                    • -
                                                    -
                                                  • -
                                                  -

                                                  举个栗子demo

                                                  -
                                                  [
                                                  {
                                                  "description": "这是我们的第一个mock栗子",
                                                  "request": {
                                                  "uri": "/demo"
                                                  },
                                                  "response": {
                                                  "text": "第一个mock响应demo"
                                                  }
                                                  }
                                                  ]
                                                  -

                                                  get请求demo

                                                  -
                                                  [
                                                  {
                                                  "description": "接口的get请求",
                                                  "request": {
                                                  "uri": "/#/test/xml",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "text": "get请求接口"
                                                  }
                                                  }
                                                  ]
                                                  -

                                                  使用moko编写Get和Post测试接口

                                                  上一节已经写了规则,这次直接来编写Get和Post请求

                                                  -

                                                  模拟一个没有参数的get请求

                                                  -
                                                  {
                                                  "description": "模拟一个没有参数的get请求",
                                                  "request": {
                                                  "uri": "/getdemo",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "text": "这是一个没有参数的get请求"
                                                  }
                                                  }
                                                  -

                                                  模拟一个带参数的请求

                                                  -
                                                  {
                                                  "description": "模拟一个带参数的请求",
                                                  "request": {
                                                  "uri": "getwithparam",
                                                  "method": "get",
                                                  "queries": {
                                                  "name": "胡汉三",
                                                  "age": "18"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "我胡汉三又回来了!!!!!"
                                                  }
                                                  }
                                                  - -

                                                  模拟一个Post请求

                                                  -
                                                  {
                                                  "description": "模拟一个Post请求",
                                                  "request": {
                                                  "uri": "/postdemo",
                                                  "method": "post"
                                                  },
                                                  "response": {
                                                  "text": "这是我的第一个mosk的post请求"
                                                  }
                                                  }
                                                  - -

                                                  这是一个带参数的post请求

                                                  -
                                                  {
                                                  "description": "这是一个带参数的post请求",
                                                  "request": {
                                                  "uri": "/postwithparam",
                                                  "method": "post",
                                                  "forms": {
                                                  "name": "胡汉三",
                                                  "sex": "男人"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "我胡汉三带着参数来了!!!!"
                                                  }
                                                  }
                                                  - -

                                                  使用moko编写包含cookie信息的测试接口

                                                  这是一个会返回cookie的get请求

                                                  {
                                                  "description": "这是一个会返回cookie的get请求",
                                                  "request": {
                                                  "uri": "/getCookies",
                                                  "method": "get"
                                                  },
                                                  "response": {
                                                  "cookies": {
                                                  "login": "true"
                                                  },
                                                  "text": "恭喜你获得cookies信息成功",
                                                  "status": 200,
                                                  "msg": "成功"
                                                  }
                                                  }
                                                  - -

                                                  这是一个携带cookies信息的get请求

                                                  {
                                                  "description": "这是一个带cookies信息的get请求",
                                                  "request": {
                                                  "uri": "/get/with/cookies",
                                                  "method": "get",
                                                  "cookies": {
                                                  "login": "true"
                                                  }
                                                  },
                                                  "response": {
                                                  "text": "这是一个需要携带cookies信息才能访问的get请求"
                                                  }
                                                  }
                                                  + Shell变量 + /posts/4654.html + shell变量分为系统变量和自定义变量,变量默认字符串类型
                                                  系统变量

                                                  $HOME 获取当前用户的家目录

                                                  +

                                                  $PWD 获取当前目录的路径

                                                  +

                                                  $SHELL 获取shell的执行引擎

                                                  +

                                                  $USER 获取当前用户的名称

                                                  +
                                                  自定义变量

                                                  在linux系统中定义变量A=1,等号两边不能有空格,使用echo $A显示A的值

                                                  +

                                                  使用unset A命令,撤销变量

                                                  +

                                                  定义只读变量readonly b=3,使用echo $b显示b的值,不能unset

                                                  +

                                                  export命令进行设置全局变量,可以让其他shell命令进行使用

                                                  +
                                                  特殊变量:**$n**

                                                  定义

                                                  +

                                                  n表示数字,范围是09,$0表示脚本名称,$19表示1~9个参数,10以上的参数要用花括号包裹,如${10}

                                                  +

                                                  运行apple.sh文件时可以传递参数

                                                  +

                                                  举个栗子

                                                  +
                                                  #!/bin/bash
                                                  #
                                                  echo "filename:" $0
                                                  echo "filename_1:" $1
                                                  echo "filename_2:" $2
                                                  echo "filename_3:" $3
                                                  echo "filename_4:" $4
                                                  echo "filename_5:" $5
                                                  -

                                                  这是一个携带cookies信息的post请求

                                                  {
                                                  "description": "这是一个带cookies信息的post请求",
                                                  "request": {
                                                  "uri": "/post/with/cookies",
                                                  "method": "post",
                                                  "cookies": {
                                                  "login": "true"
                                                  },
                                                  "json": {
                                                  "name": "huhansan",
                                                  "age": "18"
                                                  }
                                                  },
                                                  "response": {
                                                  "status": 200,
                                                  "json": {
                                                  "huhansan": "success",
                                                  "status": "1"
                                                  }
                                                  }
                                                  }
                                                  -

                                                  重定向的测试接口

                                                    -
                                                  • 使用了redirectTo:目标地址
                                                  • -
                                                  -
                                                  [
                                                  {
                                                  "description": "重定向到百度",
                                                  "request": {
                                                  "uri": "/redirect"
                                                  },
                                                  "redirectTo": "http://www.baidu.com"
                                                  },
                                                  {
                                                  "description": "重定向到自己的网页上",
                                                  "request": {
                                                  "uri": "/redirect/topath"
                                                  },
                                                  "redirectTo": "/redirect/new"
                                                  },
                                                  {
                                                  "description": "这是被重定到的请求",
                                                  "request": {
                                                  "uri": "/redirect/new"
                                                  },
                                                  "response": {
                                                  "text": "重定向成功了"
                                                  }
                                                  }
                                                  ]
                                                  +

                                                  运行后传递参数bash apple.sh 001 002 test "test sss" "hsgd_dee"

                                                  +
                                                  特殊变量:$#

                                                  定义

                                                  +

                                                  获取所有输入参数的个数,常用于循环

                                                  +

                                                  举个栗子

                                                  +
                                                  #!/bin/bash
                                                  #
                                                  echo "filename:" $0
                                                  echo "filename_1:" $1
                                                  echo "filename_2:" $2
                                                  echo "filename_3:" $3
                                                  #
                                                  echo $#
                                                  -

                                                  下载jar包

                                                  点击moke选择版本进行下载,我下载的的是moco-runner-0.11.0-standalone.jar

                                                  -

                                                  使用命令启动测试脚本

                                                  java -jar jar包的存放路径 http -p 端口 -c json文件路径
                                                  +
                                                  特殊变量:$#,$*

                                                  定义

                                                  +

                                                  $*代表命令行中所有参数,把参数作为一个整体

                                                  +

                                                  $@代表命令行中所有参数,把参数区分对待

                                                  +
                                                  特殊变量:$?

                                                  定义

                                                  +

                                                  最后一次命令的返回状态,如果返回变量的值为0,则表示最后一次命令执行正确,如果变量的值非0,则证明上一条变量返回不正确

                                                  +

                                                  举个栗子

                                                  +
                                                  [root@b09ed0cc2c9d opt]# $?
                                                  bash: 0: command not found
                                                  [root@b09ed0cc2c9d opt]# echo $?
                                                  127
                                                  [root@b09ed0cc2c9d opt]# echo $?
                                                  0
                                                  [root@b09ed0cc2c9d opt]#
                                                  ]]>
                                                  工具教程 - java + shell
                                                  - 使用docker的ubuntu容器安装code-server - /posts/7272.html - 搭建code-server

                                                  拉取Ubuntu 镜像

                                                  # 拉取镜像
                                                  docker pull aliyun
                                                  # 进入镜像
                                                  docker run --name [自定义名称] -u root --privileged=true -p 3300:8881 -v /opt/testubuntu/:/opt/main_file -it [镜像id]
                                                  -

                                                  安装code-server

                                                  github上下载安装包,解压后剪切到/home目录

                                                  -

                                                  运行code-server

                                                  # 找到bin目录下的code-server*
                                                  cd /home/code-server/bin
                                                  # 输入运行命令
                                                  export PASSWORD="123456" && ./code-server --host 0.0.0.0 --port 8881
                                                  - -

                                                  然后在浏览器输入http://ip:3000查看搭建情况

                                                  -

                                                  但是这样搭建有问题

                                                  -
                                                  -

                                                  使用上面方法部署的code-server,因为是http的,导致一些功能不好用,比如写md文档无法预览

                                                  -
                                                  -

                                                  下面就是配置使用https运行

                                                  -

                                                  配置HTTPS

                                                  -

                                                  使用openssl为IP签发证书

                                                  -
                                                  -

                                                  安装openssl

                                                  一般的linux系统已经内置openssl,可以输入openssl进行查看,没有的话就需要安装

                                                  -

                                                  创建证书请求文件

                                                  新建openssl.cnf,并编辑如下内容

                                                  -
                                                  [req]
                                                  distinguished_name = req_distinguished_name
                                                  req_extensions = v3_req

                                                  [req_distinguished_name]
                                                  countryName = Country Name (2 letter code)
                                                  countryName_default = CH
                                                  stateOrProvinceName = State or Province Name (full name)
                                                  stateOrProvinceName_default = ZJ
                                                  localityName = Locality Name (eg, city)
                                                  localityName_default = HangZhou
                                                  organizationalUnitName = Organizational Unit Name (eg, section)
                                                  organizationalUnitName_default = THS
                                                  commonName = Internet Widgits Ltd
                                                  commonName_max = 64

                                                  [ v3_req ]
                                                  # Extensions to add to a certificate request
                                                  basicConstraints = CA:FALSE
                                                  keyUsage = nonRepudiation, digitalSignature, keyEncipherment
                                                  subjectAltName = @alt_names

                                                  [alt_names]

                                                  # 改成自己的域名
                                                  # DNS.1 = your_domain_name.com

                                                  # 改成自己的ip
                                                  IP.1 = 8.142.144.75
                                                  IP.2 = 0.0.0.0
                                                  - -

                                                  生成私钥

                                                  san_domain_com 为最终生成的文件名,一般以服务器命名,可改。

                                                  -
                                                  openssl genrsa -out san_domain_com.key 2048
                                                  - -

                                                  生成CSR文件

                                                  openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf
                                                  - -

                                                  执行后,系统提示输入组织等信息,按[]内容提示输入如即可。

                                                  -

                                                  需要测试CSR文件是否生成成功

                                                  -
                                                  > openssl req -text -noout -in san_domain_com.csr
                                                  -

                                                  有下面的信息,说明生成成功

                                                  -
                                                  Certificate Request:
                                                  Data:
                                                  Version: 0 (0x0)
                                                  Subject: C=US, ST=MN, L=Minneapolis, OU=Domain Control Validated, CN=zz
                                                  Subject Public Key Info:
                                                  Public Key Algorithm: rsaEncryption
                                                  Public-Key: (2048 bit)
                                                  //...
                                                  + Shell脚本入门 + /posts/41091.html + 创建txt文件并向txt文件追加数据

                                                  首先创建test_shell.sh文件

                                                  +
                                                  touch test_shell.sh
                                                  -

                                                  自签名并生成证书

                                                  openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf
                                                  -

                                                  在当前目录会生成三个文件

                                                  -
                                                  san_domain_com.crt

                                                  san_domain_com.csr

                                                  san_domain_com.key
                                                  +

                                                  test_shell.sh文件输入shell脚本

                                                  +
                                                    +
                                                  • 使用shell创建banzhang.txt文件

                                                    +
                                                  • +
                                                  • 在文件中追加数据echo "aabbccdd" >> banzhang.txt

                                                    +
                                                  • +
                                                  +
                                                  #!/bin/bash
                                                  # 指定目录
                                                  cd /opt/
                                                  # 创建文件
                                                  touch banzhang.txt
                                                  # 向文件追加数据
                                                  echo "touch banzhang" >> banzhang.txt
                                                  -

                                                  在用户电脑安装证书

                                                  .crt证书发给用户,用户双击进行安装,然后重启浏览器

                                                  -

                                                  code server启动

                                                  在code-server的bin目录下运行如下命令,设置端口号为8881,指定对应生成的crt和key密钥文件,即可正常访问https域名

                                                  -
                                                  # 给ssh创建密码
                                                  export PASSWORD="123456"
                                                  # 启动ssh
                                                  nohup ./code-server --port 8881 --host 0.0.0.0 --cert ../san_domain_com.crt --cert-key ../san_domain_com.key > vscode.log 2>&1 &
                                                  -

                                                  然后通过浏览器访问https://ip:3000

                                                  ]]>
                                                  工具教程 - ubuntu + shell
                                                  - 性能监控平台 - /posts/23767.html - 搭建容器
                                                  -

                                                  拉取CentOS7镜像,下载安装Grafana和Influxdb

                                                  -
                                                  -
                                                  
                                                  -        # 拉取阿里云的centos7镜像
                                                  -        git pull registry.cn-zhangjiakou.aliyuncs.com/ggls/centos:7.1
                                                  -        # 运行镜像生成容器
                                                  -        docker run -itd --name centos7-influx 
                                                  -        -p 8083:8083 -p 8086:8086 
                                                  -        -p 2003:2003 -p 3000:3000 
                                                  -        -v /opt/centos7_influx:/opt 
                                                  -        --privileged=true 
                                                  -        registry.cn-zhangjiakou.aliyuncs.com/ggls/centos:7.1 /usr/sbin/init
                                                  -        # 进入容器
                                                  -        docker exec -it centos7-influx bash
                                                  -    
                                                  -
                                                  -

                                                  端口说明:

                                                  -
                                                    -
                                                  • 8083:InfluxDB的UI界面展示的端口
                                                  • -
                                                  • 8086:Grafana用来从数据库取数据的端口
                                                  • -
                                                  • 2003:Jmeter往数据库发数据的端口
                                                  • -
                                                  • 3000:本地访问服务器内部docker容器的端口
                                                  • -
                                                  -

                                                  安装Influxdb

                                                    -
                                                  1. 下载influxDB
                                                  2. -
                                                  -

                                                  新版本可以点击influxDB官网进行下载

                                                  + Shell函数 + /posts/27832.html + 系统函数
                                                  basename基本语法
                                                  basename [string/ pathname][文件后缀] 
                                                  - # 下载安装包 - wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm - # 安装运行 - yum localinstall influxdb-1.6.3.x86_64.rpm +

                                                  basename命令会删掉所有的前缀,只留一个文件名

                                                  +

                                                  选项:

                                                  +

                                                  如果指定后缀,basename会将pathname或string中的文件后缀去掉

                                                  +
                                                  举个栗子

                                                  截取该/opt/banzhang.txt路径的文件名称

                                                  +
                                                  [root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt
                                                  banzhang.txt
                                                  [root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt .txt
                                                  banzhang
                                                  [root@b09ed0cc2c9d opt]#
                                                  +
                                                  dirname基本语法
                                                  dirname 文件绝对路径
                                                  +

                                                  从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录部分)

                                                  +
                                                  举个栗子
                                                  [root@b09ed0cc2c9d opt]# dirname /opt/banzhang.txt
                                                  /opt
                                                  [root@b09ed0cc2c9d opt]#
                                                  -
                                                    -
                                                  1. influxDB配置
                                                  2. -
                                                  -

                                                  安装运行后,然后对influxDB进行配置,主要是配置Jmeter连接的数据库和端口号

                                                  +
                                                  自定义函数
                                                  基本语法
                                                  [function] funname[()]
                                                  {
                                                  Action;
                                                  [retion int;]
                                                  }

                                                  funname
                                                  - vim /etc/influxdb/influxdb.conf +
                                                  举个栗子
                                                  #!/bin/bash

                                                  function sum()
                                                  {
                                                  s=0;
                                                  s=$[$1+$2]
                                                  echo $s
                                                  }

                                                  read -p "input your paratemer1:" p1
                                                  read -p "input your oaeayemer2:" p2

                                                  sum $p1 $p2
                                                  -

                                                  找到graphite并且修改它的库与端口

                                                  -
                                                  enabled = true
                                                  database = "jmeter"
                                                  retention-policy = ""
                                                  bind-address = ":2003"
                                                  protocol = "tcp"
                                                  consistency-level = "one"
                                                  -
                                                    -
                                                  1. 找到[http],将前面的#号去掉
                                                  2. -
                                                  -
                                                  - -
                                                  -
                                                    -
                                                  1. 配置成功,启动influxDB
                                                  2. -
                                                  -
                                                    -
                                                  • 启动命令: systemctl start influxdb.service
                                                  • -
                                                  • 查看状态命令: systemctl status influxdb.service
                                                  • -
                                                  -
                                                  - -
                                                  -

                                                  安装Grafana

                                                  新版本下载位置:Grafana官网下载:https://grafana.com/grafana/download

                                                  -
                                                  wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm

                                                  sudo yum localinstall grafana-6.5.2-1.x86_64.rpm
                                                  -

                                                  然后启动

                                                  启动命令: systemctl start grafana-server.service

                                                  -

                                                  查看状态命令: systemctl status grafana-server.service

                                                  -

                                                  然后在浏览器访问登录http://ip:3000

                                                  -

                                                  配置Jmeter

                                                  一、添加监听器:Backend Listener

                                                    -
                                                  • 右键点击Thread Group
                                                  • -
                                                  • 点击Add -> Listener -> Backend Listener
                                                  • -
                                                  -

                                                  二、配置监听器:Backend Listener

                                                  Backend Listener implementation 默认选择GraphiteBackendListenerClient

                                                  -
                                                    -
                                                  • graphiteHost:InfluxDB安装的服务器的ip
                                                  • -
                                                  • graphitePort:端口;默认就是2003,除非你自己安装InfluxDB时设置了其他端口是哦(可见上面安装InfluxDB后关于graphite的配置)
                                                  • -
                                                  • rootMetricsPrefix:指标的根前缀;将测试结果存入数据库时,不同指标会生成不同表,但这些表都最好要有一个共同的前缀,这个就是了;后面会讲到不同的指标的含义(重点哦)
                                                  • -
                                                  • summaryOnly:当你线程组有多个请求又想知道每个请求的结果数据时,最好填false,因为true只会返回所有请求的集合数据报告,不会输出每条请求的数据报告
                                                  • -
                                                  • samplersList:取样器列表;想收集哪些请求就填哪些,最好用正则去匹配,减轻工作量
                                                  • -
                                                  • useRegexpForSamplersList:是否使用正则;如果true则使用,samplersList里可以匹配正则表达式
                                                  • -
                                                  • percentiles:百分比;即类似聚合报告里90% Line,95% Line,99% Line的数据;倘若想要99.9时,需要写成【99_9】,用下划线代替点
                                                  • -
                                                  -

                                                  三:运行Jmeter脚本,查看数据库

                                                  数据库里面有两个库,jmeter库就是jmeter运行生成表的数据库

                                                  -

                                                  可以看到生成了三类前缀的表,分别是: jmeter.all 、 jmeter.[请求名称];最后还有 jmeter.test 开头的表,这个后面会单独拿出来说

                                                  -

                                                  前缀的含义

                                                  -
                                                    -
                                                  • jmeter.all :代表了所有请求;当summaryOnly=true时,就只有samplerName=all的表了
                                                  • -
                                                  • jmeter.[请求名称]:代表了HTTP请求,即samplerName=[请求名称]
                                                  • -
                                                  -

                                                  Thread/Virtual Users metrics - 线程/虚拟用户指标
                                                  跟线程组设置相关的

                                                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                                  指标全称含义
                                                  jmeter.test.minATMin active threads最小活跃线程数
                                                  jmeter.test.maxATMax active threads最大活跃线程数
                                                  jmeter.test.meanATMean active threads平均活跃线程数
                                                  jmeter.test.startedTStarted threads启动线程数
                                                  jmeter.test.endedTFinished threads结束线程数
                                                  -

                                                  Response times metrics - 响应时间指标

                                                  -

                                                  划重点:每个sampler(请求)都包含了所有响应时间指标,每个sampler(请求)的每个指标都会有单独的一个表存储结果数据

                                                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +]]> + + 工具教程 + + + shell + + + + Shell工具(一) + /posts/6705.html + Cut工具
                                                  +

                                                  用于剪切数据

                                                  +
                                                  +
                                                  基本用法

                                                  cut[选项参数] filename

                                                  +

                                                  说明:默认分隔符是制表符

                                                  +
                                                  指标含义
                                                  .ok.countsampler的成功响应数
                                                  .h.count服务器每秒命中次数(每秒点击数,即TPS)
                                                  .ok.minsampler响应成功的最短响应时间
                                                  .ok.maxsampler响应成功的最长响应时间
                                                  .ok.avgsampler响应成功的平均响应时间
                                                  .ok.pctsampler响应成功的所占百分比
                                                  .ko.countsampler的失败响应数
                                                  .ko.minsampler响应失败的最短响应时间
                                                  .ko.maxsampler响应失败的最长响应时间
                                                  + - - + + - - - + + + + - - + + +
                                                  .ko.avgsampler响应失败的平均响应时间选项参数功能
                                                  .ko.pctsampler响应失败的所占百分比
                                                  -f列号,提取第几列
                                                  .a.countsampler响应数(ok.count+ko.count)-d分隔符,按照指定分隔符分割列
                                                  +
                                                  举个栗子

                                                  准备数据

                                                  +
                                                  [root@b09ed0cc2c9d local]# touch cut.txt
                                                  [root@b09ed0cc2c9d local]# vim cut.txt

                                                  dong shen
                                                  guan zhen
                                                  wo wo
                                                  lai lai
                                                  le le
                                                  + +

                                                  切割第一列数据

                                                  +
                                                  [root@b09ed0cc2c9d local]# cut -d " " -f 1 cut.txt
                                                  dong
                                                  guan
                                                  wo
                                                  lai
                                                  le
                                                  + +

                                                  切割第二,三列

                                                  +
                                                  [root@b09ed0cc2c9d local]# cut -d " " -f 2,3 cut.txt
                                                  shen
                                                  zhen
                                                  wo
                                                  lai
                                                  le
                                                  + +

                                                  在cut.txt文件切割出guan

                                                  +
                                                  [root@b09ed0cc2c9d local]# cat cut.txt
                                                  dong shen
                                                  guan zhen
                                                  wo wo
                                                  lai lai
                                                  le le
                                                  [root@b09ed0cc2c9d local]#
                                                  [root@b09ed0cc2c9d local]# cat cut.txt | grep guan
                                                  guan zhen
                                                  [root@b09ed0cc2c9d local]# cat cut.txt | grep guan | cut -d " " -f 1
                                                  guan
                                                  [root@b09ed0cc2c9d local]#
                                                  + +

                                                  选取系统PATH变量值,第二个“:”之后的所有路径

                                                  +
                                                  [root@b09ed0cc2c9d local]# echo $PATH
                                                  /usr/local/java/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                                                  [root@b09ed0cc2c9d local]# echo $PATH | cut -d : -f 3- # 不加-表示第三列,加上-表示第三列之后
                                                  /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                                                  + +

                                                  切割ifconfig后打印的IP地址

                                                  +
                                                  [root@b09ed0cc2c9d local]# ifconfig
                                                  eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                                                  inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
                                                  inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
                                                  ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
                                                  RX packets 8 bytes 656 (656.0 B)
                                                  RX errors 0 dropped 0 overruns 0 frame 0
                                                  TX packets 8 bytes 656 (656.0 B)
                                                  TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                                                  lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
                                                  inet 127.0.0.1 netmask 255.0.0.0
                                                  inet6 ::1 prefixlen 128 scopeid 0x10<host>
                                                  loop txqueuelen 1000 (Local Loopback)
                                                  RX packets 0 bytes 0 (0.0 B)
                                                  RX errors 0 dropped 0 overruns 0 frame 0
                                                  TX packets 0 bytes 0 (0.0 B)
                                                  TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                                                  [root@b09ed0cc2c9d local]# ifconfig eth0 | grep "inet " | cut -d "t" -f 2 | cut -d " " -f 2
                                                  172.17.0.2
                                                  [root@b09ed0cc2c9d local]#
                                                  + +
                                                  sed工具
                                                  +

                                                  一种流编辑器,一次处理一行内容

                                                  +
                                                  +
                                                  基本用法

                                                  sed [选项参数] command filename

                                                  +

                                                  选项参数说明

                                                  + + - - + + - - - + + + + +
                                                  .sb.bytes已发送字节选项参数功能
                                                  .rb.bytes已接收字节
                                                  -a直接在指定列模式上进行sed的动作编辑
                                                  +

                                                  命令功能描述

                                                  + + - - + + - - - + + + + - - + + - - + +
                                                  .a.minsampler响应的最短响应时间(ok.count和ko.count的最小值)命令功能描述
                                                  .a.maxsampler响应的最长响应时间(ok.count和ko.count的最大值)
                                                  a新增,a的后面可以接字串,在下一行出现
                                                  .a.avgsampler响应的平均响应时间(ok.count和ko.count的平均值)d删除
                                                  .a.pctsampler响应的百分比(根据成功和失败的总数来计算)s查找并替换
                                                  -

                                                  四、配置Grafana

                                                  步骤:

                                                  -
                                                    -
                                                  • 配置数据源

                                                    +
                                                    举个栗子

                                                    数据准备

                                                    +
                                                    [root@b09ed0cc2c9d opt]# touch sed.txt
                                                    [root@b09ed0cc2c9d opt]# vim sed.txt

                                                    dong shen
                                                    guan zhen
                                                    wo wo
                                                    lai lai

                                                    le le
                                                    + +

                                                    将mei nv 这个单词插入到 sed.txt 第二行下,打印

                                                    +
                                                    [root@b09ed0cc2c9d opt]# sed "2a mei nv" sed.txt
                                                    dong shen
                                                    guan zhen
                                                    mei nv
                                                    wo wo
                                                    lai lai

                                                    le le
                                                    [root@b09ed0cc2c9d opt]#
                                                    + +

                                                    删除sed.txt文件所有包含 wo 的行

                                                    +
                                                    [root@b09ed0cc2c9d opt]# sed "/wo/d" sed.txt
                                                    dong shen
                                                    guan zhen
                                                    lai lai

                                                    le le
                                                    [root@b09ed0cc2c9d opt]#
                                                    + +

                                                    将sed.txt文件中 wo 替换为 ni

                                                    +
                                                    [root@b09ed0cc2c9d opt]# sed "s/wo/ni/g" sed.txt
                                                    dong shen
                                                    guan zhen
                                                    ni ni
                                                    lai lai

                                                    le le
                                                    [root@b09ed0cc2c9d opt]#
                                                    + +

                                                    注意:g表示global,全部替换

                                                    +

                                                    将sed.txt文件中的第二行删除并将wo替换成ni

                                                    +
                                                    [root@b09ed0cc2c9d opt]# sed -e "2d" -e "s/wo/ni/g" sed.txt
                                                    dong shen
                                                    ni ni
                                                    lai lai

                                                    le le
                                                    [root@b09ed0cc2c9d opt]#
                                                    + + + +]]> + + 工具教程 + + + shell + + + + Shell条件判断 + /posts/50013.html + 基本语法

                                                    [ condition ] (注意,condition 前后要有空格

                                                    +

                                                    注意:条件非空即为 true,[ atguigu ]返回 true, [] 返回 false.

                                                    +
                                                    常用条件判断
                                                    两个整数之间进行比较
                                                    = 字符串比较
                                                    -lt 小于
                                                    -le 小于等于
                                                    -eq 等于
                                                    -gt 大于
                                                    -ge 大于等于
                                                    -ne 不等于
                                                    + +

                                                    举个栗子

                                                    +
                                                    [23 -lt 80]
                                                    echo $? # 判断上一步操作是不是正确
                                                    + +
                                                    按照文件权限进行判断
                                                    -r 读
                                                    -w 写
                                                    -x 执行
                                                    + +

                                                    举个栗子

                                                    +
                                                    [ -w 1.sh ]
                                                    echo $?
                                                    + +
                                                    文件类型判断
                                                    -f 文件存在且是一个常规文件
                                                    -e 文件存在
                                                    -d 文件存在且是一个目录
                                                    + +

                                                    举个栗子

                                                    +
                                                    [ -e 2.sh ]
                                                    echo $?
                                                    + +
                                                    多条件判断

                                                    $$ 与 ,前对,才执行后

                                                    +

                                                    ||

                                                    +]]>
                                                    + + 工具教程 + + + shell + +
                                                    + + Shell流程控制 + /posts/65365.html + if判断
                                                    基本语法
                                                      +
                                                    • [ 条件判断式 ],中括号和条件判断式之间必须有空格

                                                    • -
                                                    • 创建数据面板

                                                      +
                                                    • if后要有空格

                                                    -
                                                    - -
                                                    +
                                                    if [ 条件判断式 ]:then
                                                    程序
                                                    fi
                                                    #或者
                                                    if[ 条件判断式 ]
                                                    then
                                                    程序
                                                    fi
                                                    -

                                                    配置数据源

                                                    点击首页的Create your first data source,然后进行配置

                                                    -
                                                    - -
                                                    +
                                                    举个栗子

                                                    输入一个数字,如果是1,则输出 banzhang zhen shuai,如果是2,则输出 cls zhen mei ,如果是其他,则什么都不输出

                                                    +
                                                    #!/bin/bash
                                                    if [ $1 -eq 1 ]
                                                    then
                                                    echo "banzhang zhen shuai"
                                                    elif [ $1 -eq 2 ]
                                                    then
                                                    echo "cls zhen mei"
                                                    fi
                                                    -

                                                    点击选择influxDB

                                                    -
                                                    - -
                                                    +
                                                    case 语句
                                                    基本语法
                                                      +
                                                    • case行尾必须是单词 “in”,每一个模式匹配必须以右括号 “)” 结束
                                                    • +
                                                    • 双分号 “;;” 表示命令序列结束,相当于java的break
                                                    • +
                                                    • 最后的 “*)” 表示默认模式,相当于java的default
                                                    • +
                                                    +
                                                    case $变量名 in  
                                                    "值 1")
                                                    如果变量的值等于1,执行程序1
                                                    ;;
                                                    "值 2")
                                                    如果变量的值等于2,执行程序2
                                                    ;;
                                                    *)
                                                    如果变量的值不是以上的值,则执行此程序
                                                    esac
                                                    -
                                                    - -
                                                    +
                                                    举个栗子

                                                    输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其他,输出 renyao

                                                    +
                                                    #!/bin/bash
                                                    case $1 in
                                                    "1")
                                                    echo "banzhang"
                                                    ;;

                                                    "2")
                                                    echo "cls"
                                                    ;;

                                                    *)
                                                    echo "renyou"
                                                    esac
                                                    -

                                                    配置数据面板

                                                    - -
                                                    +
                                                    For循环
                                                    基本语法1
                                                    for(( 初始值;循环控制添加;变量变化 ))
                                                    do
                                                    程序
                                                    done
                                                    -

                                                    选择Add Query,然后进行配置

                                                    -
                                                    - -
                                                    +
                                                    举个栗子1

                                                    输出从1加到100的值

                                                    +
                                                    #!/bin/bash

                                                    s=0
                                                    for ((i=1;i<=100;i++))
                                                    do
                                                    s=$[$s+$i]
                                                    done
                                                    echo "cong1jiadao100:$s"
                                                    -

                                                    当我们只想看数据而不想看数据趋势图的话,可以改变它的类型;

                                                    -

                                                    在同一个界面,点击左侧列表选中第二个icon,然后选择Singlestat即可

                                                    -
                                                    - -
                                                    +
                                                    基本语法2
                                                    for 变量 in 值1 值2 值3...
                                                    do
                                                    程序
                                                    done
                                                    -

                                                    基本的配置完成,Jmeter使用GraphiteBackendListenerClient来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加;后面将会介绍如何通过InfluxDBBackendListenerClient来采集数据

                                                    -

                                                    给Jmeter的Backend Listener配置为InfluxDBBackendListenerClient

                                                    -

                                                    首先来看看每个配置项的含义

                                                    -
                                                      -
                                                    1. influxdbUrl:安装influxdb的路径;主要格式:http://主机地址:8086/write?db=数据库名
                                                    2. -
                                                    3. application:应用名称;在 events 表中对应的字段是 application
                                                    4. -
                                                    5. measurement:表名;数据存储到哪个表,默认是jmeter,不用改即可
                                                    6. -
                                                    7. summaryOnly:同GraphiteBackendListenerClient
                                                    8. -
                                                    9. samplersRegex:同GraphiteBackendListenerClient
                                                    10. -
                                                    11. percentiles:同GraphiteBackendListenerClient
                                                    12. -
                                                    13. testTitle:测试名称;在 events 表中对应的字段是 text ,JMeter在测试的开始和结束时自动生成注释,该注释的值以’start’和’end’结尾
                                                    14. -
                                                    15. eventTags:Grafana允许为每个注释显示标签;在 events 表中对应的字段是 tags
                                                    16. -
                                                    -

                                                    inDB数据库
                                                    使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表:

                                                    -

                                                    events :主要拿存事件的

                                                    -

                                                    jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示

                                                    -

                                                    配置数据面板

                                                    -

                                                    首先,进入官方模板库: https://grafana.com/dashboards ,然后跟着图片导入模板并初始化即可

                                                    -
                                                    - -
                                                    +
                                                    举个栗子2

                                                    打印所有输入参数

                                                    +
                                                    #!/bin/bash

                                                    for i in "$*"
                                                    do
                                                    echo "banzhang xihuan $i"
                                                    done
                                                    #-----------------------------------
                                                    for j in "$@"
                                                    do
                                                    echo "banzhang xihuan $j"
                                                    done
                                                    -
                                                    - -
                                                    +
                                                    while 循环
                                                    基本语法
                                                    while[ 条件判断式 ]
                                                    do
                                                    程序
                                                    done
                                                    -
                                                    - -
                                                    +
                                                    举个栗子

                                                    输出从1加到100的值

                                                    +
                                                    #!/bin/bash

                                                    i=1
                                                    while [ $i -le 100 ]
                                                    do
                                                    s=$[$s + $i]
                                                    i=$[$i + 1]
                                                    done

                                                    echo $s
                                                    -
                                                    - -
                                                    +
                                                    read 读取控制台输入
                                                    基本语法
                                                    read(选项)(参数)
                                                    选项:
                                                    -p:指定读取值时的提示符
                                                    -t:指定读取值时的等待的时间(秒)
                                                    参数:
                                                    变量:指定读取值的变量名
                                                    -

                                                    然后jmeter再次执行一下测试计划

                                                    -
                                                    - -
                                                    +
                                                    举个栗子

                                                    提示7秒内,读取控制台输入的名称

                                                    +
                                                    #!/bin/bash

                                                    read -t 7 -p "input your name" NAME

                                                    echo $NAME
                                                    -

                                                    模板自带了三个下拉筛选框

                                                    -
                                                      -
                                                    1. data_source:数据源,在Grafana配置了多少个就显示多少个

                                                      -
                                                    2. -
                                                    3. application:在Jmeter配置好的application,如果每次测试计划执行时的application都不一样,你就可以通过这个筛选出对应测试时机的结果数据了

                                                      -
                                                    4. -
                                                    5. transaction:在Jmeter配置好的sampleList,譬如我只发了get、post请求,这里就只会给你选get、post;可以滑到页面下面看到针对某个请求的数据展示

                                                      -
                                                    6. +]]> + + 工具教程 + + + shell + + + + Shell运算符 + /posts/59561.html + 基本语法
                                                        +
                                                      1. $((运算式)) 或 $[运算式]
                                                      2. +
                                                      3. expr + - * /
                                                      -

                                                      卸载Grafana

                                                      停止Grafana服务。

                                                      -
                                                      systemctl stop grafana-server.service
                                                      -
                                                      systemctl disable grafana-server.service
                                                      -

                                                      查看要卸载的包的名称

                                                      -
                                                      yum list installed
                                                      -

                                                      输入命令行卸载Grafana

                                                      -
                                                      yum remove grafana.x86_64
                                                      +

                                                      注意,运算符号间要有空格

                                                      +
                                                      举个加法栗子
                                                      expr 3 + 2
                                                      5
                                                      + +
                                                      举栗子[(2+3)*4]

                                                      需要使用键盘左上角的`,把需要提前运算的包起来

                                                      +
                                                      expr `expr 2 + 3` \* 4
                                                      + +

                                                      或者

                                                      +
                                                      s=$[(2+3)*4]
                                                      echo $s
                                                      ]]>
                                                      工具教程 - 监控 + shell
                                                      - 硬件性能监控平台 - /posts/2166.html - 拉取prometheus镜像
                                                      docker pull prom/prometheus
                                                      -

                                                      创建prometheus容器并启动

                                                      docker run -itd --name=docker_prometheus --restart=always -p 3090:9090 -v /opt/prometheus:/ prom/prometheus
                                                      -

                                                      验证

                                                      -

                                                      通过浏览器访问http://ip:3090进行访问

                                                      -

                                                      方法一:服务器上直接安装node_export

                                                      首先,用浏览器访问:node_export 下载,然后上传到被监控的服务器并解压
                                                      进入解压文件夹,直接启动./node_exporter

                                                      -

                                                      方法二:拉取docker node_export镜像

                                                      docker pull prom/node-exporter
                                                      + Shell工具(二) + /posts/55957.html + awk工具
                                                      +

                                                      强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

                                                      +
                                                      +

                                                      awk [选项参数] ‘pattern1{action1}’ filename

                                                      +
                                                        +
                                                      • pattern:表示awk在数据中查找的内容
                                                      • +
                                                      • action:找到匹配内容时执行命令
                                                      • +
                                                      + + + + + + + + + + + + + + + +
                                                      选项参数功能
                                                      -F指定输入文件分隔符
                                                      -v赋值一个用户定义变量
                                                      +
                                                      举个栗子

                                                      数据准备的是/etc/passwd

                                                      +
                                                      [root@b09ed0cc2c9d opt]# cat passwd
                                                      root:x:0:0:root:/root:/bin/bash
                                                      bin:x:1:1:bin:/bin:/sbin/nologin
                                                      daemon:x:2:2:daemon:/sbin:/sbin/nologin
                                                      adm:x:3:4:adm:/var/adm:/sbin/nologin
                                                      lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
                                                      sync:x:5:0:sync:/sbin:/bin/sync
                                                      shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
                                                      halt:x:7:0:halt:/sbin:/sbin/halt
                                                      mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
                                                      operator:x:11:0:operator:/root:/sbin/nologin
                                                      games:x:12:100:games:/usr/games:/sbin/nologin
                                                      ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
                                                      nobody:x:99:99:Nobody:/:/sbin/nologin
                                                      systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
                                                      dbus:x:81:81:System message bus:/:/sbin/nologin
                                                      -

                                                      创建node_export容器并启动

                                                      docker run -itd --name=node-exporter \
                                                      --restart=always \
                                                      -p 9100:9100 \
                                                      -v "/proc:/host/proc:ro" \
                                                      -v "/sys:/host/sys:ro" \
                                                      -v "/:/rootfs:ro" \
                                                      prom/node-exporter
                                                      +

                                                      搜素passwd文件以root关键字开头的所有航,并输出该行的第7列

                                                      +
                                                      [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $7}' passwd
                                                      /bin/bash
                                                      [root@b09ed0cc2c9d opt]#
                                                      -

                                                      验证

                                                      -

                                                      在浏览器访问http://ip:9100/metrics进行访问

                                                      -

                                                      配置prometheus + node_export

                                                      node_export的作用收集硬件数据

                                                      -

                                                      使用vim修改yum文件容器内:/etc/prometheus/prometheus.yml

                                                      -
                                                      scrape_configs:
                                                      - job_name: prometheus
                                                      static_configs:
                                                      - targets: ['localhost:9090']
                                                      labels:
                                                      instance: prometheus

                                                      - job_name: linux
                                                      static_configs:
                                                      - targets: ['被监控的服务器ip:9100']
                                                      labels:
                                                      instance: localhost
                                                      +

                                                      搜素passwd文件以root关键字开头的所有航,并输出该行的第1列和第7列,输出时以逗号分隔

                                                      +
                                                      [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $1","$7}' passwd
                                                      root,/bin/bash
                                                      -

                                                      重启prometheus容器

                                                      docker restart docker_prometheus
                                                      +

                                                      只显示/etc/passwd的第一列和第7列,以逗号分隔,且在所有航前面添加列名 user,shell在最后一行添加 ddd, /bin/zuishuai

                                                      +
                                                      [root@b09ed0cc2c9d opt]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "ddd,bin/zuishuai"}' passwd
                                                      -

                                                      配置Grafana

                                                      使用Grafana下载版本

                                                      -

                                                      配置数据源

                                                        -
                                                      • 数据源:选择prometheus

                                                        -
                                                      • -
                                                      • URL输入http://prometheus机器ip:3090

                                                        -
                                                      • -
                                                      • 点击Save & Test保存

                                                        -
                                                      • -
                                                      -

                                                      添加仪表盘

                                                      使用官方仪表盘进行下载仪表盘
                                                      导入仪表盘
                                                      import via grafana.com输入框输入模板ID12884

                                                      -

                                                      ID:12633也可以使用。

                                                      -

                                                      点击 load,然后底部选择刚弄的数据源,点击import

                                                      -

                                                      注意:
                                                      点击json下载12884的json文件

                                                      +

                                                      注意:BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行

                                                      +

                                                      将passwd 文件中的用户id增加数值1并输出

                                                      +
                                                      [root@b09ed0cc2c9d opt]# awk -F : -v i=1 '{print $3+i}' passwd
                                                      + +
                                                      内置变量
                                                      + + + + + + + + + + + + + + + + + + +
                                                      变量说明
                                                      filename文件名
                                                      nr已读的记录数
                                                      nf浏览记录的域的个数
                                                      +
                                                      举个栗子

                                                      数据准备

                                                      +
                                                      [root@b09ed0cc2c9d opt]# cat sed.txt
                                                      dong shen
                                                      guan zhen
                                                      wo wo
                                                      lai lai

                                                      le le
                                                      + +

                                                      统计passwd文件名,每行的行号,每列的列数

                                                      +
                                                      [root@b09ed0cc2c9d opt]# awk -F : '{print FILENAME "," NR "," NF}' passwd
                                                      + +

                                                      打印空行所在的行号

                                                      +
                                                      awk '/^$/ {print NR}' sed.txt
                                                      + +
                                                      sort工具
                                                      +

                                                      文件排序

                                                      +
                                                      +

                                                      sort(选项)(参数)

                                                      + + + + + + + + + + + + + + + + + + + + + + + +
                                                      选项说明
                                                      -n按照数值大小排序
                                                      -r以相反的顺序排序
                                                      -t设置排序使用的分隔字符
                                                      -k指定需要排序的列
                                                      +

                                                      参数是指定待排序文件列表

                                                      ]]>
                                                      工具教程 - 监控 + shell
                                                      @@ -3227,119 +3664,7 @@ if __name__ == "__init__":

                                                      举个栗子:

                                                      栗子1

                                                      image

                                                      运行结果:

                                                      image

                                                      栗子2

                                                      image

                                                      -
                                                      运行结果:

                                                      image

                                                      -]]> - - 工具教程 - - - python - -
                                                      - - python自动化配置参数 - /posts/1.html - selenium 配置参数

                                                      每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器

                                                      -

                                                      selenium启动配置参数接收是ChromeOptions类,创建方式如下 :

                                                      -
                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()
                                                      driver = webdriver.Chrome(chrome_options=option)
                                                      创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目
                                                      - -
                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()
                                                      -

                                                      添加启动参数

                                                      option.add_argument()
                                                      - -

                                                      添加扩展应用

                                                      option.add_extension()
                                                      option.add_encoded_extension()
                                                      - -

                                                      添加实验性质的设置参数

                                                      option.add_experimental_option()
                                                      - -

                                                      设置调试器地址

                                                      option.debugger_address()
                                                      - -

                                                      常用配置参数:

                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()

                                                      -

                                                      添加UA

                                                      options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
                                                      - -

                                                      指定浏览器分辨率

                                                      options.add_argument('window-size=1920x3000')
                                                      - -

                                                      谷歌文档提到需要加上这个属性来规避bug

                                                      chrome_options.add_argument('--disable-gpu')
                                                      - -

                                                      隐藏滚动条, 应对一些特殊页面

                                                      options.add_argument('--hide-scrollbars')
                                                      - -

                                                      不加载图片, 提升速度

                                                      options.add_argument('blink-settings=imagesEnabled=false')
                                                      - -

                                                      浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

                                                      options.add_argument('--headless')
                                                      - -

                                                      以最高权限运行

                                                      options.add_argument('--no-sandbox')
                                                      - -

                                                      手动指定使用的浏览器位置

                                                      options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe"
                                                      - -

                                                      添加crx插件

                                                      option.add_extension('d:crxAdBlock_v2.17.crx')
                                                      - -

                                                      禁用JavaScript

                                                      option.add_argument("--disable-javascript")
                                                      - -

                                                      设置开发者模式启动,该模式下webdriver属性为正常值

                                                      options.add_experimental_option('excludeSwitches', ['enable-automation'])
                                                      - -

                                                      禁用浏览器弹窗

                                                      prefs = { 
                                                      'profile.default_content_setting_values' : {
                                                      'notifications' : 2
                                                      }
                                                      }
                                                      options.add_experimental_option('prefs',prefs)
                                                      - -

                                                      添加代理 ip

                                                      options.add_argument("--proxy-server=http://XXXXX.com:80")

                                                      driver = webdriver.Chrome(chrome_options=chrome_options)
                                                      - -

                                                      其他配置项目参数

                                                      指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区

                                                      --user-data-dir=[PATH]
                                                      - -

                                                      指定缓存Cache路径

                                                      –disk-cache-dir=[PATH]
                                                      - -

                                                      指定Cache大小,单位Byte

                                                      –disk-cache-size=
                                                      - -

                                                      重置到初始状态,第一次运行

                                                      –first run
                                                      - -

                                                      隐身模式启动

                                                      –incognito
                                                      - -

                                                      禁用Javascript

                                                      –disable-javascript
                                                      - -

                                                      将地址栏弹出的提示菜单数量改为num个

                                                      --omnibox-popup-count="num"
                                                      - -

                                                      修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果

                                                      --user-agent="xxxxxxxx"
                                                      - -

                                                      禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果

                                                      --disable-plugins
                                                      - -

                                                      禁用JavaScript,如果觉得速度慢在加上这个

                                                      --disable-javascript
                                                      - -

                                                      禁用java

                                                      --disable-java
                                                      - -

                                                      启动就最大化

                                                      --start-maximized
                                                      - -

                                                      取消沙盒模式

                                                      --no-sandbox
                                                      - -

                                                      单进程运行

                                                      --single-process
                                                      - -

                                                      每个标签使用单独进程

                                                      --process-per-tab
                                                      - -

                                                      每个站点使用单独进程

                                                      --process-per-site
                                                      - -

                                                      插件不启用单独进程

                                                      --in-process-plugins
                                                      - -

                                                      禁用弹出拦截

                                                      --disable-popup-blocking
                                                      - -

                                                      禁用插件

                                                      --disable-plugins
                                                      - -

                                                      禁用图像

                                                      --disable-images
                                                      - -

                                                      启动进入隐身模式

                                                      --incognito
                                                      - -

                                                      启用账户切换菜单

                                                      --enable-udd-profiles
                                                      - -

                                                      使用pac代理 [via 1/2]

                                                      --proxy-pac-url
                                                      - -

                                                      设置语言为简体中文

                                                      --lang=zh-CN
                                                      - -

                                                      自定义缓存目录

                                                      --disk-cache-dir
                                                      - -

                                                      自定义缓存最大值(单位byte)

                                                      --disk-cache-size
                                                      - -

                                                      自定义多媒体缓存最大值(单位byte)

                                                      --media-cache-size
                                                      - -

                                                      在工具 栏增加一个书签按钮

                                                      --bookmark-menu
                                                      - -

                                                      启用书签同步

                                                      --enable-sync
                                                      - -

                                                      使用缓存

                                                      options.add_argument("--disk-cache-dir=/path/to/cache/folder")
                                                      options.add_argument("--disable-application-cache")
                                                      options.add_argument("--disable-cache")
                                                      - -

                                                      参考:https://www.cnblogs.com/sn5200/p/15949796.html

                                                      +
                                                      运行结果:

                                                      image

                                                      ]]>
                                                      工具教程 @@ -3349,252 +3674,109 @@ if __name__ == "__init__":
                                                      - Shell脚本入门 - /posts/41091.html - 创建txt文件并向txt文件追加数据

                                                      首先创建test_shell.sh文件

                                                      -
                                                      touch test_shell.sh
                                                      + python自动化配置参数 + /posts/1.html + selenium 配置参数

                                                      每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器

                                                      +

                                                      selenium启动配置参数接收是ChromeOptions类,创建方式如下 :

                                                      +
                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()
                                                      driver = webdriver.Chrome(chrome_options=option)
                                                      创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目
                                                      -

                                                      test_shell.sh文件输入shell脚本

                                                      -
                                                        -
                                                      • 使用shell创建banzhang.txt文件

                                                        -
                                                      • -
                                                      • 在文件中追加数据echo "aabbccdd" >> banzhang.txt

                                                        -
                                                      • -
                                                      -
                                                      #!/bin/bash
                                                      # 指定目录
                                                      cd /opt/
                                                      # 创建文件
                                                      touch banzhang.txt
                                                      # 向文件追加数据
                                                      echo "touch banzhang" >> banzhang.txt
                                                      +
                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()
                                                      +

                                                      添加启动参数

                                                      option.add_argument()
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - Shell函数 - /posts/27832.html - 系统函数
                                                      basename基本语法
                                                      basename [string/ pathname][文件后缀] 
                                                      +

                                                      添加扩展应用

                                                      option.add_extension()
                                                      option.add_encoded_extension()
                                                      -

                                                      basename命令会删掉所有的前缀,只留一个文件名

                                                      -

                                                      选项:

                                                      -

                                                      如果指定后缀,basename会将pathname或string中的文件后缀去掉

                                                      -
                                                      举个栗子

                                                      截取该/opt/banzhang.txt路径的文件名称

                                                      -
                                                      [root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt
                                                      banzhang.txt
                                                      [root@b09ed0cc2c9d opt]# basename /opt/banzhang.txt .txt
                                                      banzhang
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      添加实验性质的设置参数

                                                      option.add_experimental_option()
                                                      -
                                                      dirname基本语法
                                                      dirname 文件绝对路径
                                                      +

                                                      设置调试器地址

                                                      option.debugger_address()
                                                      -

                                                      从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录部分)

                                                      -
                                                      举个栗子
                                                      [root@b09ed0cc2c9d opt]# dirname /opt/banzhang.txt
                                                      /opt
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      常用配置参数:

                                                      from selenium import webdriver
                                                      option = webdriver.ChromeOptions()

                                                      +

                                                      添加UA

                                                      options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
                                                      -
                                                      自定义函数
                                                      基本语法
                                                      [function] funname[()]
                                                      {
                                                      Action;
                                                      [retion int;]
                                                      }

                                                      funname
                                                      +

                                                      指定浏览器分辨率

                                                      options.add_argument('window-size=1920x3000')
                                                      -
                                                      举个栗子
                                                      #!/bin/bash

                                                      function sum()
                                                      {
                                                      s=0;
                                                      s=$[$1+$2]
                                                      echo $s
                                                      }

                                                      read -p "input your paratemer1:" p1
                                                      read -p "input your oaeayemer2:" p2

                                                      sum $p1 $p2
                                                      +

                                                      谷歌文档提到需要加上这个属性来规避bug

                                                      chrome_options.add_argument('--disable-gpu')
                                                      +

                                                      隐藏滚动条, 应对一些特殊页面

                                                      options.add_argument('--hide-scrollbars')
                                                      +

                                                      不加载图片, 提升速度

                                                      options.add_argument('blink-settings=imagesEnabled=false')
                                                      +

                                                      浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

                                                      options.add_argument('--headless')
                                                      +

                                                      以最高权限运行

                                                      options.add_argument('--no-sandbox')
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - Shell变量 - /posts/4654.html - shell变量分为系统变量和自定义变量,变量默认字符串类型
                                                      系统变量

                                                      $HOME 获取当前用户的家目录

                                                      -

                                                      $PWD 获取当前目录的路径

                                                      -

                                                      $SHELL 获取shell的执行引擎

                                                      -

                                                      $USER 获取当前用户的名称

                                                      -
                                                      自定义变量

                                                      在linux系统中定义变量A=1,等号两边不能有空格,使用echo $A显示A的值

                                                      -

                                                      使用unset A命令,撤销变量

                                                      -

                                                      定义只读变量readonly b=3,使用echo $b显示b的值,不能unset

                                                      -

                                                      export命令进行设置全局变量,可以让其他shell命令进行使用

                                                      -
                                                      特殊变量:**$n**

                                                      定义

                                                      -

                                                      n表示数字,范围是09,$0表示脚本名称,$19表示1~9个参数,10以上的参数要用花括号包裹,如${10}

                                                      -

                                                      运行apple.sh文件时可以传递参数

                                                      -

                                                      举个栗子

                                                      -
                                                      #!/bin/bash
                                                      #
                                                      echo "filename:" $0
                                                      echo "filename_1:" $1
                                                      echo "filename_2:" $2
                                                      echo "filename_3:" $3
                                                      echo "filename_4:" $4
                                                      echo "filename_5:" $5
                                                      +

                                                      手动指定使用的浏览器位置

                                                      options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe"
                                                      -

                                                      运行后传递参数bash apple.sh 001 002 test "test sss" "hsgd_dee"

                                                      -
                                                      特殊变量:$#

                                                      定义

                                                      -

                                                      获取所有输入参数的个数,常用于循环

                                                      -

                                                      举个栗子

                                                      -
                                                      #!/bin/bash
                                                      #
                                                      echo "filename:" $0
                                                      echo "filename_1:" $1
                                                      echo "filename_2:" $2
                                                      echo "filename_3:" $3
                                                      #
                                                      echo $#
                                                      +

                                                      添加crx插件

                                                      option.add_extension('d:crxAdBlock_v2.17.crx')
                                                      -
                                                      特殊变量:$#,$*

                                                      定义

                                                      -

                                                      $*代表命令行中所有参数,把参数作为一个整体

                                                      -

                                                      $@代表命令行中所有参数,把参数区分对待

                                                      -
                                                      特殊变量:$?

                                                      定义

                                                      -

                                                      最后一次命令的返回状态,如果返回变量的值为0,则表示最后一次命令执行正确,如果变量的值非0,则证明上一条变量返回不正确

                                                      -

                                                      举个栗子

                                                      -
                                                      [root@b09ed0cc2c9d opt]# $?
                                                      bash: 0: command not found
                                                      [root@b09ed0cc2c9d opt]# echo $?
                                                      127
                                                      [root@b09ed0cc2c9d opt]# echo $?
                                                      0
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      禁用JavaScript

                                                      option.add_argument("--disable-javascript")
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - Shell工具(一) - /posts/6705.html - Cut工具
                                                      -

                                                      用于剪切数据

                                                      -
                                                      -
                                                      基本用法

                                                      cut[选项参数] filename

                                                      -

                                                      说明:默认分隔符是制表符

                                                      - - - - - - - - - - - - - - - -
                                                      选项参数功能
                                                      -f列号,提取第几列
                                                      -d分隔符,按照指定分隔符分割列
                                                      -
                                                      举个栗子

                                                      准备数据

                                                      -
                                                      [root@b09ed0cc2c9d local]# touch cut.txt
                                                      [root@b09ed0cc2c9d local]# vim cut.txt

                                                      dong shen
                                                      guan zhen
                                                      wo wo
                                                      lai lai
                                                      le le
                                                      +

                                                      设置开发者模式启动,该模式下webdriver属性为正常值

                                                      options.add_experimental_option('excludeSwitches', ['enable-automation'])
                                                      -

                                                      切割第一列数据

                                                      -
                                                      [root@b09ed0cc2c9d local]# cut -d " " -f 1 cut.txt
                                                      dong
                                                      guan
                                                      wo
                                                      lai
                                                      le
                                                      +

                                                      禁用浏览器弹窗

                                                      prefs = { 
                                                      'profile.default_content_setting_values' : {
                                                      'notifications' : 2
                                                      }
                                                      }
                                                      options.add_experimental_option('prefs',prefs)
                                                      -

                                                      切割第二,三列

                                                      -
                                                      [root@b09ed0cc2c9d local]# cut -d " " -f 2,3 cut.txt
                                                      shen
                                                      zhen
                                                      wo
                                                      lai
                                                      le
                                                      +

                                                      添加代理 ip

                                                      options.add_argument("--proxy-server=http://XXXXX.com:80")

                                                      driver = webdriver.Chrome(chrome_options=chrome_options)
                                                      -

                                                      在cut.txt文件切割出guan

                                                      -
                                                      [root@b09ed0cc2c9d local]# cat cut.txt
                                                      dong shen
                                                      guan zhen
                                                      wo wo
                                                      lai lai
                                                      le le
                                                      [root@b09ed0cc2c9d local]#
                                                      [root@b09ed0cc2c9d local]# cat cut.txt | grep guan
                                                      guan zhen
                                                      [root@b09ed0cc2c9d local]# cat cut.txt | grep guan | cut -d " " -f 1
                                                      guan
                                                      [root@b09ed0cc2c9d local]#
                                                      +

                                                      其他配置项目参数

                                                      指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区

                                                      --user-data-dir=[PATH]
                                                      -

                                                      选取系统PATH变量值,第二个“:”之后的所有路径

                                                      -
                                                      [root@b09ed0cc2c9d local]# echo $PATH
                                                      /usr/local/java/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                                                      [root@b09ed0cc2c9d local]# echo $PATH | cut -d : -f 3- # 不加-表示第三列,加上-表示第三列之后
                                                      /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                                                      +

                                                      指定缓存Cache路径

                                                      –disk-cache-dir=[PATH]
                                                      -

                                                      切割ifconfig后打印的IP地址

                                                      -
                                                      [root@b09ed0cc2c9d local]# ifconfig
                                                      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                                                      inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
                                                      inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
                                                      ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
                                                      RX packets 8 bytes 656 (656.0 B)
                                                      RX errors 0 dropped 0 overruns 0 frame 0
                                                      TX packets 8 bytes 656 (656.0 B)
                                                      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                                                      lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
                                                      inet 127.0.0.1 netmask 255.0.0.0
                                                      inet6 ::1 prefixlen 128 scopeid 0x10<host>
                                                      loop txqueuelen 1000 (Local Loopback)
                                                      RX packets 0 bytes 0 (0.0 B)
                                                      RX errors 0 dropped 0 overruns 0 frame 0
                                                      TX packets 0 bytes 0 (0.0 B)
                                                      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                                                      [root@b09ed0cc2c9d local]# ifconfig eth0 | grep "inet " | cut -d "t" -f 2 | cut -d " " -f 2
                                                      172.17.0.2
                                                      [root@b09ed0cc2c9d local]#
                                                      +

                                                      指定Cache大小,单位Byte

                                                      –disk-cache-size=
                                                      -
                                                      sed工具
                                                      -

                                                      一种流编辑器,一次处理一行内容

                                                      -
                                                      -
                                                      基本用法

                                                      sed [选项参数] command filename

                                                      -

                                                      选项参数说明

                                                      - - - - - - - - - - - -
                                                      选项参数功能
                                                      -a直接在指定列模式上进行sed的动作编辑
                                                      -

                                                      命令功能描述

                                                      - - - - - - - - - - - - - - - - - - - -
                                                      命令功能描述
                                                      a新增,a的后面可以接字串,在下一行出现
                                                      d删除
                                                      s查找并替换
                                                      -
                                                      举个栗子

                                                      数据准备

                                                      -
                                                      [root@b09ed0cc2c9d opt]# touch sed.txt
                                                      [root@b09ed0cc2c9d opt]# vim sed.txt

                                                      dong shen
                                                      guan zhen
                                                      wo wo
                                                      lai lai

                                                      le le
                                                      +

                                                      重置到初始状态,第一次运行

                                                      –first run
                                                      -

                                                      将mei nv 这个单词插入到 sed.txt 第二行下,打印

                                                      -
                                                      [root@b09ed0cc2c9d opt]# sed "2a mei nv" sed.txt
                                                      dong shen
                                                      guan zhen
                                                      mei nv
                                                      wo wo
                                                      lai lai

                                                      le le
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      隐身模式启动

                                                      –incognito
                                                      -

                                                      删除sed.txt文件所有包含 wo 的行

                                                      -
                                                      [root@b09ed0cc2c9d opt]# sed "/wo/d" sed.txt
                                                      dong shen
                                                      guan zhen
                                                      lai lai

                                                      le le
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      禁用Javascript

                                                      –disable-javascript
                                                      -

                                                      将sed.txt文件中 wo 替换为 ni

                                                      -
                                                      [root@b09ed0cc2c9d opt]# sed "s/wo/ni/g" sed.txt
                                                      dong shen
                                                      guan zhen
                                                      ni ni
                                                      lai lai

                                                      le le
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      将地址栏弹出的提示菜单数量改为num个

                                                      --omnibox-popup-count="num"
                                                      -

                                                      注意:g表示global,全部替换

                                                      -

                                                      将sed.txt文件中的第二行删除并将wo替换成ni

                                                      -
                                                      [root@b09ed0cc2c9d opt]# sed -e "2d" -e "s/wo/ni/g" sed.txt
                                                      dong shen
                                                      ni ni
                                                      lai lai

                                                      le le
                                                      [root@b09ed0cc2c9d opt]#
                                                      +

                                                      修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果

                                                      --user-agent="xxxxxxxx"
                                                      +

                                                      禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果

                                                      --disable-plugins
                                                      +

                                                      禁用JavaScript,如果觉得速度慢在加上这个

                                                      --disable-javascript
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - Shell条件判断 - /posts/50013.html - 基本语法

                                                      [ condition ] (注意,condition 前后要有空格

                                                      -

                                                      注意:条件非空即为 true,[ atguigu ]返回 true, [] 返回 false.

                                                      -
                                                      常用条件判断
                                                      两个整数之间进行比较
                                                      = 字符串比较
                                                      -lt 小于
                                                      -le 小于等于
                                                      -eq 等于
                                                      -gt 大于
                                                      -ge 大于等于
                                                      -ne 不等于
                                                      +

                                                      禁用java

                                                      --disable-java
                                                      -

                                                      举个栗子

                                                      -
                                                      [23 -lt 80]
                                                      echo $? # 判断上一步操作是不是正确
                                                      +

                                                      启动就最大化

                                                      --start-maximized
                                                      -
                                                      按照文件权限进行判断
                                                      -r 读
                                                      -w 写
                                                      -x 执行
                                                      +

                                                      取消沙盒模式

                                                      --no-sandbox
                                                      -

                                                      举个栗子

                                                      -
                                                      [ -w 1.sh ]
                                                      echo $?
                                                      +

                                                      单进程运行

                                                      --single-process
                                                      -
                                                      文件类型判断
                                                      -f 文件存在且是一个常规文件
                                                      -e 文件存在
                                                      -d 文件存在且是一个目录
                                                      +

                                                      每个标签使用单独进程

                                                      --process-per-tab
                                                      -

                                                      举个栗子

                                                      -
                                                      [ -e 2.sh ]
                                                      echo $?
                                                      +

                                                      每个站点使用单独进程

                                                      --process-per-site
                                                      -
                                                      多条件判断

                                                      $$ 与 ,前对,才执行后

                                                      -

                                                      ||

                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - 自动获取driver - /posts/1.html - 自动获取driver

                                                      chrome

                                                      下载驱动

                                                      @staticmethod
                                                      def down_driver(option):
                                                      '''
                                                      return: 返回driver,可以直接使用
                                                      '''
                                                      driver = webdriver.Chrome(
                                                      ChromeDriverManager(
                                                      url="https://registry.npmmirror.com/-/binary/chromedriver",
                                                      latest_release_url="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE",
                                                      cache_valid_range=365).install(),
                                                      options=option)
                                                      driver.delete_all_cookies()
                                                      return driver
                                                      +

                                                      插件不启用单独进程

                                                      --in-process-plugins
                                                      -

                                                      下载2

                                                      @staticmethod
                                                      def determin_chrome_driver():

                                                      chrome_path = r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'


                                                      # 指定谷歌驱动目标位置
                                                      folder_path = os.path.join(ROOT_DIR, "env_setting")
                                                      # 驱动名称
                                                      file_name = 'chromedriver.exe'
                                                      # 路径拼接
                                                      file_path = os.path.join(folder_path, file_name)

                                                      if os.path.exists(file_path):
                                                      # 获取chromedriver.exe版本(谷歌浏览器驱动)
                                                      result = subprocess.run([file_path, '--version'], capture_output=True, text=True)
                                                      driverversion = '.'.join(result.stdout.strip().split(' ')[1].split('.')[:-1])

                                                      # 获取chrome.exe版本(谷歌浏览器)
                                                      command = f'wmic datafile where name="{chrome_path}" get Version /value'
                                                      result_a = subprocess.run(command, capture_output=True, text=True, shell=True)
                                                      output = result_a.stdout.strip()
                                                      chromeversion = '.'.join(output.split('=')[1].split('.')[0:3])

                                                      # 判断版本是否一致,不一致就重新下载
                                                      if driverversion != chromeversion:
                                                      # 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径
                                                      download_driver_path = ChromeDriverManager().install()
                                                      # 复制文件到目标位置
                                                      shutil.copy(download_driver_path, folder_path)
                                                      else:
                                                      print("版本一致,无需重新下载!")

                                                      else:
                                                      download_driver_path = ChromeDriverManager().install()
                                                      shutil.copy(download_driver_path, folder_path)

                                                      return file_path
                                                      +

                                                      禁用弹出拦截

                                                      --disable-popup-blocking
                                                      -

                                                      edge

                                                      下载驱动

                                                      from webdriver_manager.microsoft import EdgeChromiumDriverManager

                                                      @staticmethod
                                                      def download_edgedriver():
                                                      '''
                                                      function:下载edge浏览器驱动
                                                      return: 返回一个下载的路径
                                                      '''
                                                      folder_path = EdgeChromiumDriverManager().install()
                                                      shutil.copy(folder_path, webDriver) # 拷贝folder_path到webDriver目录下
                                                      return folder_path
                                                      +

                                                      禁用插件

                                                      --disable-plugins
                                                      -

                                                      使用

                                                      # driver = webdriver.Edge(service=Service(下载路径))
                                                      driver = webdriver.Edge(service=Service(ddDriver.download_edgedriver()))
                                                      +

                                                      禁用图像

                                                      --disable-images
                                                      + +

                                                      启动进入隐身模式

                                                      --incognito
                                                      + +

                                                      启用账户切换菜单

                                                      --enable-udd-profiles
                                                      + +

                                                      使用pac代理 [via 1/2]

                                                      --proxy-pac-url
                                                      + +

                                                      设置语言为简体中文

                                                      --lang=zh-CN
                                                      + +

                                                      自定义缓存目录

                                                      --disk-cache-dir
                                                      +

                                                      自定义缓存最大值(单位byte)

                                                      --disk-cache-size
                                                      +

                                                      自定义多媒体缓存最大值(单位byte)

                                                      --media-cache-size
                                                      -

                                                      firefox

                                                      下载驱动

                                                      @staticmethod
                                                      def down_driver(option):
                                                      driver = webdriver.Firefox
                                                      (
                                                      service=FirefoxService(GeckoDriverManager(url="https://github.com/mozilla/geckodriver/releases/download",
                                                      latest_release_url="https://api.github.com/repos/mozilla/geckodriver/"
                                                      "releases/latest",
                                                      cache_valid_range=365).install(),
                                                      options=option))
                                                      return driver
                                                      +

                                                      在工具 栏增加一个书签按钮

                                                      --bookmark-menu
                                                      +

                                                      启用书签同步

                                                      --enable-sync
                                                      +

                                                      使用缓存

                                                      options.add_argument("--disk-cache-dir=/path/to/cache/folder")
                                                      options.add_argument("--disable-application-cache")
                                                      options.add_argument("--disable-cache")
                                                      +

                                                      参考:https://www.cnblogs.com/sn5200/p/15949796.html

                                                      ]]>
                                                      工具教程 @@ -3604,79 +3786,28 @@ if __name__ == "__init__":
                                                      - Shell流程控制 - /posts/65365.html - if判断
                                                      基本语法
                                                        -
                                                      • [ 条件判断式 ],中括号和条件判断式之间必须有空格

                                                        -
                                                      • -
                                                      • if后要有空格

                                                        -
                                                      • -
                                                      -
                                                      if [ 条件判断式 ]:then
                                                      程序
                                                      fi
                                                      #或者
                                                      if[ 条件判断式 ]
                                                      then
                                                      程序
                                                      fi
                                                      - -
                                                      举个栗子

                                                      输入一个数字,如果是1,则输出 banzhang zhen shuai,如果是2,则输出 cls zhen mei ,如果是其他,则什么都不输出

                                                      -
                                                      #!/bin/bash
                                                      if [ $1 -eq 1 ]
                                                      then
                                                      echo "banzhang zhen shuai"
                                                      elif [ $1 -eq 2 ]
                                                      then
                                                      echo "cls zhen mei"
                                                      fi
                                                      - -
                                                      case 语句
                                                      基本语法
                                                        -
                                                      • case行尾必须是单词 “in”,每一个模式匹配必须以右括号 “)” 结束
                                                      • -
                                                      • 双分号 “;;” 表示命令序列结束,相当于java的break
                                                      • -
                                                      • 最后的 “*)” 表示默认模式,相当于java的default
                                                      • -
                                                      -
                                                      case $变量名 in  
                                                      "值 1")
                                                      如果变量的值等于1,执行程序1
                                                      ;;
                                                      "值 2")
                                                      如果变量的值等于2,执行程序2
                                                      ;;
                                                      *)
                                                      如果变量的值不是以上的值,则执行此程序
                                                      esac
                                                      - -
                                                      举个栗子

                                                      输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其他,输出 renyao

                                                      -
                                                      #!/bin/bash
                                                      case $1 in
                                                      "1")
                                                      echo "banzhang"
                                                      ;;

                                                      "2")
                                                      echo "cls"
                                                      ;;

                                                      *)
                                                      echo "renyou"
                                                      esac
                                                      - -
                                                      For循环
                                                      基本语法1
                                                      for(( 初始值;循环控制添加;变量变化 ))
                                                      do
                                                      程序
                                                      done
                                                      - -
                                                      举个栗子1

                                                      输出从1加到100的值

                                                      -
                                                      #!/bin/bash

                                                      s=0
                                                      for ((i=1;i<=100;i++))
                                                      do
                                                      s=$[$s+$i]
                                                      done
                                                      echo "cong1jiadao100:$s"
                                                      - -
                                                      基本语法2
                                                      for 变量 in 值1 值2 值3...
                                                      do
                                                      程序
                                                      done
                                                      + 自动获取driver + /posts/1.html + 自动获取driver

                                                      chrome

                                                      下载驱动

                                                      @staticmethod
                                                      def down_driver(option):
                                                      '''
                                                      return: 返回driver,可以直接使用
                                                      '''
                                                      driver = webdriver.Chrome(
                                                      ChromeDriverManager(
                                                      url="https://registry.npmmirror.com/-/binary/chromedriver",
                                                      latest_release_url="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE",
                                                      cache_valid_range=365).install(),
                                                      options=option)
                                                      driver.delete_all_cookies()
                                                      return driver
                                                      -
                                                      举个栗子2

                                                      打印所有输入参数

                                                      -
                                                      #!/bin/bash

                                                      for i in "$*"
                                                      do
                                                      echo "banzhang xihuan $i"
                                                      done
                                                      #-----------------------------------
                                                      for j in "$@"
                                                      do
                                                      echo "banzhang xihuan $j"
                                                      done
                                                      +

                                                      下载2

                                                      @staticmethod
                                                      def determin_chrome_driver():

                                                      chrome_path = r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'


                                                      # 指定谷歌驱动目标位置
                                                      folder_path = os.path.join(ROOT_DIR, "env_setting")
                                                      # 驱动名称
                                                      file_name = 'chromedriver.exe'
                                                      # 路径拼接
                                                      file_path = os.path.join(folder_path, file_name)

                                                      if os.path.exists(file_path):
                                                      # 获取chromedriver.exe版本(谷歌浏览器驱动)
                                                      result = subprocess.run([file_path, '--version'], capture_output=True, text=True)
                                                      driverversion = '.'.join(result.stdout.strip().split(' ')[1].split('.')[:-1])

                                                      # 获取chrome.exe版本(谷歌浏览器)
                                                      command = f'wmic datafile where name="{chrome_path}" get Version /value'
                                                      result_a = subprocess.run(command, capture_output=True, text=True, shell=True)
                                                      output = result_a.stdout.strip()
                                                      chromeversion = '.'.join(output.split('=')[1].split('.')[0:3])

                                                      # 判断版本是否一致,不一致就重新下载
                                                      if driverversion != chromeversion:
                                                      # 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径
                                                      download_driver_path = ChromeDriverManager().install()
                                                      # 复制文件到目标位置
                                                      shutil.copy(download_driver_path, folder_path)
                                                      else:
                                                      print("版本一致,无需重新下载!")

                                                      else:
                                                      download_driver_path = ChromeDriverManager().install()
                                                      shutil.copy(download_driver_path, folder_path)

                                                      return file_path
                                                      -
                                                      while 循环
                                                      基本语法
                                                      while[ 条件判断式 ]
                                                      do
                                                      程序
                                                      done
                                                      +

                                                      edge

                                                      下载驱动

                                                      from webdriver_manager.microsoft import EdgeChromiumDriverManager

                                                      @staticmethod
                                                      def download_edgedriver():
                                                      '''
                                                      function:下载edge浏览器驱动
                                                      return: 返回一个下载的路径
                                                      '''
                                                      folder_path = EdgeChromiumDriverManager().install()
                                                      shutil.copy(folder_path, webDriver) # 拷贝folder_path到webDriver目录下
                                                      return folder_path
                                                      -
                                                      举个栗子

                                                      输出从1加到100的值

                                                      -
                                                      #!/bin/bash

                                                      i=1
                                                      while [ $i -le 100 ]
                                                      do
                                                      s=$[$s + $i]
                                                      i=$[$i + 1]
                                                      done

                                                      echo $s
                                                      +

                                                      使用

                                                      # driver = webdriver.Edge(service=Service(下载路径))
                                                      driver = webdriver.Edge(service=Service(ddDriver.download_edgedriver()))
                                                      -
                                                      read 读取控制台输入
                                                      基本语法
                                                      read(选项)(参数)
                                                      选项:
                                                      -p:指定读取值时的提示符
                                                      -t:指定读取值时的等待的时间(秒)
                                                      参数:
                                                      变量:指定读取值的变量名
                                                      -
                                                      举个栗子

                                                      提示7秒内,读取控制台输入的名称

                                                      -
                                                      #!/bin/bash

                                                      read -t 7 -p "input your name" NAME

                                                      echo $NAME
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      - - Shell运算符 - /posts/59561.html - 基本语法
                                                        -
                                                      1. $((运算式)) 或 $[运算式]
                                                      2. -
                                                      3. expr + - * /
                                                      4. -
                                                      -

                                                      注意,运算符号间要有空格

                                                      -
                                                      举个加法栗子
                                                      expr 3 + 2
                                                      5
                                                      +

                                                      firefox

                                                      下载驱动

                                                      @staticmethod
                                                      def down_driver(option):
                                                      driver = webdriver.Firefox
                                                      (
                                                      service=FirefoxService(GeckoDriverManager(url="https://github.com/mozilla/geckodriver/releases/download",
                                                      latest_release_url="https://api.github.com/repos/mozilla/geckodriver/"
                                                      "releases/latest",
                                                      cache_valid_range=365).install(),
                                                      options=option))
                                                      return driver
                                                      -
                                                      举栗子[(2+3)*4]

                                                      需要使用键盘左上角的`,把需要提前运算的包起来

                                                      -
                                                      expr `expr 2 + 3` \* 4
                                                      -

                                                      或者

                                                      -
                                                      s=$[(2+3)*4]
                                                      echo $s
                                                      ]]>
                                                      工具教程 - shell + python
                                                      @@ -3693,115 +3824,6 @@ if __name__ == "__init__": SpringBoot - - Shell工具(二) - /posts/55957.html - awk工具
                                                      -

                                                      强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

                                                      -
                                                      -

                                                      awk [选项参数] ‘pattern1{action1}’ filename

                                                      -
                                                        -
                                                      • pattern:表示awk在数据中查找的内容
                                                      • -
                                                      • action:找到匹配内容时执行命令
                                                      • -
                                                      - - - - - - - - - - - - - - - -
                                                      选项参数功能
                                                      -F指定输入文件分隔符
                                                      -v赋值一个用户定义变量
                                                      -
                                                      举个栗子

                                                      数据准备的是/etc/passwd

                                                      -
                                                      [root@b09ed0cc2c9d opt]# cat passwd
                                                      root:x:0:0:root:/root:/bin/bash
                                                      bin:x:1:1:bin:/bin:/sbin/nologin
                                                      daemon:x:2:2:daemon:/sbin:/sbin/nologin
                                                      adm:x:3:4:adm:/var/adm:/sbin/nologin
                                                      lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
                                                      sync:x:5:0:sync:/sbin:/bin/sync
                                                      shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
                                                      halt:x:7:0:halt:/sbin:/sbin/halt
                                                      mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
                                                      operator:x:11:0:operator:/root:/sbin/nologin
                                                      games:x:12:100:games:/usr/games:/sbin/nologin
                                                      ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
                                                      nobody:x:99:99:Nobody:/:/sbin/nologin
                                                      systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
                                                      dbus:x:81:81:System message bus:/:/sbin/nologin
                                                      - -

                                                      搜素passwd文件以root关键字开头的所有航,并输出该行的第7列

                                                      -
                                                      [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $7}' passwd
                                                      /bin/bash
                                                      [root@b09ed0cc2c9d opt]#
                                                      - -

                                                      搜素passwd文件以root关键字开头的所有航,并输出该行的第1列和第7列,输出时以逗号分隔

                                                      -
                                                      [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $1","$7}' passwd
                                                      root,/bin/bash
                                                      - -

                                                      只显示/etc/passwd的第一列和第7列,以逗号分隔,且在所有航前面添加列名 user,shell在最后一行添加 ddd, /bin/zuishuai

                                                      -
                                                      [root@b09ed0cc2c9d opt]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "ddd,bin/zuishuai"}' passwd
                                                      - -

                                                      注意:BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行

                                                      -

                                                      将passwd 文件中的用户id增加数值1并输出

                                                      -
                                                      [root@b09ed0cc2c9d opt]# awk -F : -v i=1 '{print $3+i}' passwd
                                                      - -
                                                      内置变量
                                                      - - - - - - - - - - - - - - - - - - -
                                                      变量说明
                                                      filename文件名
                                                      nr已读的记录数
                                                      nf浏览记录的域的个数
                                                      -
                                                      举个栗子

                                                      数据准备

                                                      -
                                                      [root@b09ed0cc2c9d opt]# cat sed.txt
                                                      dong shen
                                                      guan zhen
                                                      wo wo
                                                      lai lai

                                                      le le
                                                      - -

                                                      统计passwd文件名,每行的行号,每列的列数

                                                      -
                                                      [root@b09ed0cc2c9d opt]# awk -F : '{print FILENAME "," NR "," NF}' passwd
                                                      - -

                                                      打印空行所在的行号

                                                      -
                                                      awk '/^$/ {print NR}' sed.txt
                                                      - -
                                                      sort工具
                                                      -

                                                      文件排序

                                                      -
                                                      -

                                                      sort(选项)(参数)

                                                      - - - - - - - - - - - - - - - - - - - - - - - -
                                                      选项说明
                                                      -n按照数值大小排序
                                                      -r以相反的顺序排序
                                                      -t设置排序使用的分隔字符
                                                      -k指定需要排序的列
                                                      -

                                                      参数是指定待排序文件列表

                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      接口开发环境部署 /posts/557.html @@ -3822,28 +3844,6 @@ if __name__ == "__init__": SpringBoot - - Shell脚本初探 - /posts/38168.html - 编写shell脚本时,必须以 #! /bin/bash 开头

                                                      在linux创建helloworld.sh文件,在文件内输入:

                                                      -
                                                      #!/bin/bash
                                                      #################
                                                      echo "hello World"
                                                      - -

                                                      然后保存该文件

                                                      -

                                                      运行.sh文件时,有两种方法可以运行

                                                      -
                                                      第一种是给该文件添加可执行权限
                                                      chmod +x ./helloworld.sh
                                                      - -

                                                      运行文件:./ 不能省略

                                                      -
                                                      ./helloworld.sh
                                                      - -
                                                      第二种是使用bash或sh 文件路径运行该文件
                                                      bash helloworld.sh
                                                      #
                                                      sh helloworld.sh
                                                      -]]>
                                                      - - 工具教程 - - - shell - -
                                                      返回cookie的Get接口开发 /posts/24951.html @@ -3876,6 +3876,18 @@ if __name__ == "__init__": SpringBoot + + 需要cookie访问的Get接口开发 + /posts/15521.html + 编写需要cookie才能访问的接口

                                                      这个接口还是在MyGetMethod类里面编写方法

                                                      +
                                                      /**
                                                      * 要求客户端携带cookie访问
                                                      * 这是一个需要携带cookies信息才能访问的get请求
                                                      */
                                                      @RequestMapping(value = "/get/with/cookies", method = RequestMethod.GET)
                                                      @ApiOperation(value = "要求客户端携带cookie访问", httpMethod = "GET")
                                                      public String getWithCookies(HttpServletRequest request){
                                                      Cookie[] cookies = request.getCookies();
                                                      if(Objects.isNull(cookies)){
                                                      return "你必须携带cookies信息来";
                                                      }
                                                      for(Cookie cookie : cookies){
                                                      if(cookie.getName().equals("login") && cookie.getValue().equals("True")){
                                                      return "恭喜你,访问成功!,这是一个需要携带cookies信息才能访问的get请求";
                                                      }
                                                      }
                                                      return "你必须携带cookies信息来";
                                                      }
                                                      ]]>
                                                      + + 工具教程 + + + SpringBoot + +
                                                      需要参数才能访问的get请求 /posts/7613.html @@ -3895,10 +3907,13 @@ if __name__ == "__init__": - 需要cookie访问的Get接口开发 - /posts/15521.html - 编写需要cookie才能访问的接口

                                                      这个接口还是在MyGetMethod类里面编写方法

                                                      -
                                                      /**
                                                      * 要求客户端携带cookie访问
                                                      * 这是一个需要携带cookies信息才能访问的get请求
                                                      */
                                                      @RequestMapping(value = "/get/with/cookies", method = RequestMethod.GET)
                                                      @ApiOperation(value = "要求客户端携带cookie访问", httpMethod = "GET")
                                                      public String getWithCookies(HttpServletRequest request){
                                                      Cookie[] cookies = request.getCookies();
                                                      if(Objects.isNull(cookies)){
                                                      return "你必须携带cookies信息来";
                                                      }
                                                      for(Cookie cookie : cookies){
                                                      if(cookie.getName().equals("login") && cookie.getValue().equals("True")){
                                                      return "恭喜你,访问成功!,这是一个需要携带cookies信息才能访问的get请求";
                                                      }
                                                      }
                                                      return "你必须携带cookies信息来";
                                                      }
                                                      ]]>
                                                      + 开发获取用户列表的Post接口 + /posts/16785.html + 开发获取用户列表的post请求

                                                      开发添加人员信息时需要的字段数据

                                                      首先,写一个User类,这将是添加时的字段数据

                                                      +
                                                      @Data
                                                      public class User {
                                                      private String userName;
                                                      private String password;
                                                      private String name;
                                                      private String age;
                                                      private String sex;
                                                      }
                                                      + +

                                                      然后开始写怎么获取用户列表,相当于添加用户

                                                      @RequestBody User u请求post接口时,在Body填写上传的数据

                                                      +
                                                      @RequestMapping(value = "/getUserList", method = RequestMethod.POST)
                                                      @ApiOperation(value = "获取用户列表", httpMethod = "POST")
                                                      public String getUserList(HttpServletRequest request,
                                                      @RequestBody User u){
                                                      User user;
                                                      // 获取cookies
                                                      Cookie[] cookies= request.getCookies();
                                                      // 验证cookies是否合法
                                                      for(Cookie c:cookies){
                                                      if (c.getName().equals("login")
                                                      && c.getValue().equals("true")
                                                      && u.getUserName().equals("zhangsan")
                                                      && u.getPassword().equals("123456")){
                                                      user = new User();
                                                      user.setName("lisi");
                                                      user.setAge("18");
                                                      user.setSex("man");
                                                      return user.toString();
                                                      }
                                                      }
                                                      return "参数不合法";
                                                      }
                                                      ]]>
                                                      工具教程 @@ -3907,13 +3922,12 @@ if __name__ == "__init__":
                                                      - 开发获取用户列表的Post接口 - /posts/16785.html - 开发获取用户列表的post请求

                                                      开发添加人员信息时需要的字段数据

                                                      首先,写一个User类,这将是添加时的字段数据

                                                      -
                                                      @Data
                                                      public class User {
                                                      private String userName;
                                                      private String password;
                                                      private String name;
                                                      private String age;
                                                      private String sex;
                                                      }
                                                      - -

                                                      然后开始写怎么获取用户列表,相当于添加用户

                                                      @RequestBody User u请求post接口时,在Body填写上传的数据

                                                      -
                                                      @RequestMapping(value = "/getUserList", method = RequestMethod.POST)
                                                      @ApiOperation(value = "获取用户列表", httpMethod = "POST")
                                                      public String getUserList(HttpServletRequest request,
                                                      @RequestBody User u){
                                                      User user;
                                                      // 获取cookies
                                                      Cookie[] cookies= request.getCookies();
                                                      // 验证cookies是否合法
                                                      for(Cookie c:cookies){
                                                      if (c.getName().equals("login")
                                                      && c.getValue().equals("true")
                                                      && u.getUserName().equals("zhangsan")
                                                      && u.getPassword().equals("123456")){
                                                      user = new User();
                                                      user.setName("lisi");
                                                      user.setAge("18");
                                                      user.setSex("man");
                                                      return user.toString();
                                                      }
                                                      }
                                                      return "参数不合法";
                                                      }
                                                      ]]>
                                                      + 开发获得cookie的Post登录接口 + /posts/42075.html + 开发获得cookie的Post登录接口

                                                      @RequestMapping(value = "/v1")的作用是把这个value和方法上的登录地址进行拼接,比如:/v1/login

                                                      +

                                                      @RestController标识该接口可以被托管

                                                      +

                                                      方法参数@RequestParam(value = "userName", required = true) String userName,代码中的required = true起到必填的作用

                                                      +

                                                      举个栗子

                                                      @RestController
                                                      @Api(value = "/", tags = {SwaggerConfig.TagPost})
                                                      @RequestMapping(value = "/v1")
                                                      public class MyPostMethod {

                                                      //这个变量用来装cookie信息的
                                                      private static Cookie cookie;

                                                      //用户登录成功获取到cookies,然后访问其他接口获取到列表
                                                      @RequestMapping(value = "/login",method = RequestMethod.POST)
                                                      @ApiOperation(value = "登录接口,成功后获取到cookies信息",httpMethod = "POST")
                                                      public String login(HttpServletResponse response,
                                                      @RequestParam(value = "userName", required = true) String userName,
                                                      @RequestParam(value = "password", required = true) String password){
                                                      if (userName.equals("zhangsan") && password.equals("123456")){
                                                      cookie = new Cookie("login","true");
                                                      response.addCookie(cookie);
                                                      return "恭喜你登录成功!";
                                                      }
                                                      return "用户名或密码错误!";

                                                      }
                                                      ]]>
                                                      工具教程 @@ -3937,20 +3951,6 @@ if __name__ == "__init__": window
                                                      - - 开发获得cookie的Post登录接口 - /posts/42075.html - 开发获得cookie的Post登录接口

                                                      @RequestMapping(value = "/v1")的作用是把这个value和方法上的登录地址进行拼接,比如:/v1/login

                                                      -

                                                      @RestController标识该接口可以被托管

                                                      -

                                                      方法参数@RequestParam(value = "userName", required = true) String userName,代码中的required = true起到必填的作用

                                                      -

                                                      举个栗子

                                                      @RestController
                                                      @Api(value = "/", tags = {SwaggerConfig.TagPost})
                                                      @RequestMapping(value = "/v1")
                                                      public class MyPostMethod {

                                                      //这个变量用来装cookie信息的
                                                      private static Cookie cookie;

                                                      //用户登录成功获取到cookies,然后访问其他接口获取到列表
                                                      @RequestMapping(value = "/login",method = RequestMethod.POST)
                                                      @ApiOperation(value = "登录接口,成功后获取到cookies信息",httpMethod = "POST")
                                                      public String login(HttpServletResponse response,
                                                      @RequestParam(value = "userName", required = true) String userName,
                                                      @RequestParam(value = "password", required = true) String password){
                                                      if (userName.equals("zhangsan") && password.equals("123456")){
                                                      cookie = new Cookie("login","true");
                                                      response.addCookie(cookie);
                                                      return "恭喜你登录成功!";
                                                      }
                                                      return "用户名或密码错误!";

                                                      }
                                                      ]]>
                                                      - - 工具教程 - - - SpringBoot - -
                                                      Arrivals Thread Group的使用 /posts/63387.html diff --git a/self/css/indexs.css b/self/css/indexs.css index dc63168ad..932da6c55 100644 --- a/self/css/indexs.css +++ b/self/css/indexs.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{padding:0;margin:0;width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden;overflow-y:auto}@media screen and (max-width:765px){body,html{line-height:1.15;-webkit-text-size-adjust:100%;padding:0;margin:0;width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden;overflow-y:auto}}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}#article-container .flink .flink-item-desc,#article-container .flink .flink-item-name,#aside-content .card-archives ul.card-archive-list>.card-archive-list-item a span,#aside-content .card-categories ul.card-category-list>.card-category-list-item a span,#pagination .next_info,#pagination .prev_info,#sidebar #sidebar-menus .menus_items .site-page,.limit-one-line,.site-data>a .headline{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}#article-container figure.gallery-group .gallery-group-name,#article-container figure.gallery-group p,#aside-content .aside-list>.aside-list-item .content>.comment,#aside-content .aside-list>.aside-list-item .content>.name,#aside-content .aside-list>.aside-list-item .content>.title,#post-info .post-title,#recent-posts>.recent-post-item>.recent-post-info>.article-title,#recent-posts>.recent-post-item>.recent-post-info>.content,.article-sort-item-title,.limit-more-line,.relatedPosts>.relatedPosts-list .content .title{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}#article-container.post-content h1:before,#article-container.post-content h2:before,#article-container.post-content h3:before,#article-container.post-content h4:before,#article-container.post-content h5:before,#article-container.post-content h6:before,#post .post-outdate-notice:before,.fontawesomeIcon,.note:not(.no-icon)::before,span.categoryBar-list-count::before{display:inline-block;font-weight:600;font-family:'Font Awesome 6 Free';text-rendering:auto;-webkit-font-smoothing:antialiased}#aside-content .card-widget,#recent-posts>.recent-post-item,.cardHover,.layout>.recent-posts .pagination>:not(.space),.layout>div:first-child:not(.recent-posts){border-radius:12px;background:var(--card-bg);-webkit-box-shadow:var(--card-box-shadow);box-shadow:var(--card-box-shadow);-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#aside-content .card-widget:hover,#recent-posts>.recent-post-item:hover,.cardHover:hover,.layout>.recent-posts .pagination>:not(.space):hover,.layout>div:first-child:not(.recent-posts):hover{-webkit-box-shadow:var(--card-hover-box-shadow);box-shadow:var(--card-hover-box-shadow)}#aside-content .aside-list>.aside-list-item .thumbnail>img,#recent-posts>.recent-post-item .post_cover img.post_bg,.article-sort-item-img img,.imgHover{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .6s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .6s;-o-transition:filter 375ms ease-in .2s,-o-transform .6s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .6s;transition:filter 375ms ease-in .2s,transform .6s;object-fit:cover}#aside-content .aside-list>.aside-list-item .thumbnail>img:hover,#recent-posts>.recent-post-item .post_cover img.post_bg:hover,.article-sort-item-img img:hover,.imgHover:hover{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#pagination .next-post:hover img,#pagination .prev-post:hover img,.postImgHover:hover img,.relatedPosts>.relatedPosts-list>div:hover img{opacity:.8;-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#pagination .next-post img,#pagination .prev-post img,.postImgHover img,.relatedPosts>.relatedPosts-list>div img{position:absolute;width:100%;height:100%;opacity:.4;-webkit-transition:all .6s,filter 375ms ease-in .2s;-moz-transition:all .6s,filter 375ms ease-in .2s;-o-transition:all .6s,filter 375ms ease-in .2s;-ms-transition:all .6s,filter 375ms ease-in .2s;transition:all .6s,filter 375ms ease-in .2s;object-fit:cover}.category-lists ul,.list-beauty{list-style:none}.category-lists ul li,.list-beauty li{position:relative;padding:.12em .4em .12em 1.4em}.category-lists ul li:hover:before,.list-beauty li:hover:before{border-color:var(--pseudo-hover)}.category-lists ul li:before,.list-beauty li:before{position:absolute;top:.67em;left:0;width:.43em;height:.43em;border:.215em solid #49b1f5;border-radius:.43em;background:0 0;content:'';cursor:pointer;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}#content-inner,#footer{-webkit-animation:bottom-top 1s;-moz-animation:bottom-top 1s;-o-animation:bottom-top 1s;-ms-animation:bottom-top 1s;animation:bottom-top 1s}#page-header{-webkit-animation:header-effect 1s;-moz-animation:header-effect 1s;-o-animation:header-effect 1s;-ms-animation:header-effect 1s;animation:header-effect 1s}#site-subtitle,#site-title{-webkit-animation:titleScale 1s;-moz-animation:titleScale 1s;-o-animation:titleScale 1s;-ms-animation:titleScale 1s;animation:titleScale 1s}#nav.show{-webkit-animation:headerNoOpacity 1s;-moz-animation:headerNoOpacity 1s;-o-animation:headerNoOpacity 1s;-ms-animation:headerNoOpacity 1s;animation:headerNoOpacity 1s}#web_bg,canvas:not(#ribbon-canvas){-webkit-animation:to_show 4s;-moz-animation:to_show 4s;-o-animation:to_show 4s;-ms-animation:to_show 4s;animation:to_show 4s}#ribbon-canvas{-webkit-animation:ribbon_to_show 4s;-moz-animation:ribbon_to_show 4s;-o-animation:ribbon_to_show 4s;-ms-animation:ribbon_to_show 4s;animation:ribbon_to_show 4s}#sidebar-menus.open>:nth-child(1){-webkit-animation:sidebarItem .2s;-moz-animation:sidebarItem .2s;-o-animation:sidebarItem .2s;-ms-animation:sidebarItem .2s;animation:sidebarItem .2s}#sidebar-menus.open>:nth-child(2){-webkit-animation:sidebarItem .4s;-moz-animation:sidebarItem .4s;-o-animation:sidebarItem .4s;-ms-animation:sidebarItem .4s;animation:sidebarItem .4s}#sidebar-menus.open>:nth-child(3){-webkit-animation:sidebarItem .6s;-moz-animation:sidebarItem .6s;-o-animation:sidebarItem .6s;-ms-animation:sidebarItem .6s;animation:sidebarItem .6s}#sidebar-menus.open>:nth-child(4){-webkit-animation:sidebarItem .8s;-moz-animation:sidebarItem .8s;-o-animation:sidebarItem .8s;-ms-animation:sidebarItem .8s;animation:sidebarItem .8s}.scroll-down-effects{-webkit-animation:scroll-down-effect 1.5s infinite;-moz-animation:scroll-down-effect 1.5s infinite;-o-animation:scroll-down-effect 1.5s infinite;-ms-animation:scroll-down-effect 1.5s infinite;animation:scroll-down-effect 1.5s infinite}.reward-main{-webkit-animation:donate_effcet .3s .1s ease both;-moz-animation:donate_effcet .3s .1s ease both;-o-animation:donate_effcet .3s .1s ease both;-ms-animation:donate_effcet .3s .1s ease both;animation:donate_effcet .3s .1s ease both}@-moz-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-webkit-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-o-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-moz-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-webkit-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-o-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-moz-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-webkit-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-o-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-moz-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-webkit-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-o-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-moz-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-webkit-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-o-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-moz-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-webkit-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-o-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-moz-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-webkit-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-o-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-moz-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@-o-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}:root{--global-font-size:16px;--global-bg:#fff;--font-color:#4c4948;--hr-border:#a4d8fa;--hr-before-color:#80c8f8;--search-bg:#f6f8fa;--search-input-color:#4c4948;--search-result-title:#4c4948;--preloader-bg:#37474f;--preloader-color:#fff;--tab-border-color:#f0f0f0;--tab-botton-bg:#f0f0f0;--tab-botton-color:#1f2d3d;--tab-button-hover-bg:#dcdcdc;--tab-button-active-bg:#fff;--card-bg:#fff;--sidebar-bg:#f6f8fa;--btn-hover-color:#ff7242;--btn-color:#fff;--btn-bg:#49b1f5;--text-bg-hover:rgba(73,177,245,0.7);--light-grey:#eee;--dark-grey:#cacaca;--white:#fff;--text-highlight-color:#1f2d3d;--blockquote-color:#6a737d;--blockquote-bg:rgba(73,177,245,0.1);--reward-pop:#f5f5f5;--toc-link-color:#666261;--card-box-shadow:0 3px 8px 6px rgba(7,17,27,0.05);--card-hover-box-shadow:0 3px 8px 6px rgba(7,17,27,0.09);--pseudo-hover:#ff7242;--headline-presudo:#a0a0a0;--scrollbar-color:#49b1f5}body{position:relative;min-height:100%;background:var(--global-bg);color:var(--font-color);font-size:var(--global-font-size);font-family:-apple-system,IBM Plex Mono,monosapce,"微软雅黑",sans-serif;line-height:2;-webkit-tap-highlight-color:transparent}*{scrollbar-width:thin;scrollbar-color:#ff7242 transparent}input::placeholder{color:var(--font-color)}h1,h2,h3,h4,h5,h6{position:relative;margin:20px 0 14px;color:var(--text-highlight-color);font-weight:700}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:inherit!important}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.table-wrap{overflow-x:scroll;margin:0 0 20px}table{display:table;width:100%;border-spacing:0;border-collapse:collapse;empty-cells:show}table thead{background:rgba(153,169,191,.1)}table td,table th{padding:6px 12px;border:1px solid var(--light-grey);vertical-align:middle}::selection{background:#00c4b6;color:#f7f7f7}button{padding:0;outline:0;border:none;background:0 0;cursor:pointer;touch-action:manipulation}.is-center{text-align:center}.copy-true{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.pull-left{float:left}.pull-right{float:right}img:not([src]),img[src='']{opacity:0}.img-alt{margin:-10px 0 10px;color:#858585}.img-alt:hover{text-decoration:none!important}blockquote{margin:0 0 20px;padding:12px 15px;border-left:3px solid #49b1f5;background-color:var(--blockquote-bg);color:var(--blockquote-color)}blockquote footer cite:before{padding:0 5px;content:'—'}blockquote>:last-child{margin-bottom:0!important}:root{--hl-color:#90a4ae;--hl-bg:#f6f8fa;--hltools-bg:#e6ebf1;--hltools-color:#90a4ae;--hlnumber-bg:#f6f8fa;--hlnumber-color:rgba(144,164,174,0.5);--hlscrollbar-bg:#dce4eb;--hlexpand-bg:linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9))}figure.highlight table{scrollbar-color:var(--hlscrollbar-bg) transparent}figure.highlight pre .deletion{color:#bf42bf}figure.highlight pre .addition{color:#105ede}figure.highlight pre .meta{color:#7c4dff}figure.highlight pre .comment{color:rgba(149,165,166,.8)}figure.highlight pre .attribute,figure.highlight pre .css .class,figure.highlight pre .css .id,figure.highlight pre .css .pseudo,figure.highlight pre .html .doctype,figure.highlight pre .regexp,figure.highlight pre .ruby .constant,figure.highlight pre .tag .name,figure.highlight pre .variable,figure.highlight pre .xml .doctype,figure.highlight pre .xml .pi,figure.highlight pre .xml .tag .title{color:#e53935}figure.highlight pre .tag{color:#39adb5}figure.highlight pre .command,figure.highlight pre .constant,figure.highlight pre .literal,figure.highlight pre .number,figure.highlight pre .params,figure.highlight pre .preprocessor{color:#f76d47}figure.highlight pre .built_in{color:#ffb62c}figure.highlight pre .css .rules .attribute,figure.highlight pre .formula,figure.highlight pre .header,figure.highlight pre .inheritance,figure.highlight pre .number,figure.highlight pre .ruby .class .title,figure.highlight pre .ruby .symbol,figure.highlight pre .special,figure.highlight pre .string,figure.highlight pre .value,figure.highlight pre .xml .cdata{color:#91b859}figure.highlight pre .css .hexcolor,figure.highlight pre .keyword,figure.highlight pre .title{color:#39adb5}figure.highlight pre .coffeescript .title,figure.highlight pre .function,figure.highlight pre .javascript .title,figure.highlight pre .perl .sub,figure.highlight pre .python .decorator,figure.highlight pre .python .title,figure.highlight pre .ruby .function .title,figure.highlight pre .ruby .title .keyword{color:#6182b8}figure.highlight pre .javascript .function,figure.highlight pre .tag .attr{color:#7c4dff}#article-container figure.highlight .line.marked{background-color:rgba(128,203,196,.251)}#article-container figure.highlight table{display:block;overflow:auto;border:none}#article-container figure.highlight table td{padding:0;border:none}#article-container figure.highlight .gutter pre{padding-right:10px;padding-left:10px;background-color:var(--hlnumber-bg);color:var(--hlnumber-color);text-align:right}#article-container figure.highlight .code pre{padding-right:10px;padding-left:10px;width:100%}#article-container figure.highlight,#article-container pre{overflow:auto;margin:0 0 20px;padding:0;background:var(--hl-bg);color:var(--hl-color);line-height:1.6}#article-container code,#article-container pre{font-size:var(--global-font-size)}#article-container code{padding:2px 4px;background:rgba(27,31,35,.05);color:#f47466}#article-container pre{padding:10px 20px}#article-container pre code{padding:0;background:0 0;color:var(--hl-color);text-shadow:none}#article-container figure.highlight{position:relative}#article-container figure.highlight pre{margin:0;padding:8px 0;border:none}#article-container figure.highlight .caption,#article-container figure.highlight figcaption{padding:6px 0 2px 14px;font-size:var(--global-font-size);line-height:1em}#article-container figure.highlight .caption a,#article-container figure.highlight figcaption a{float:right;padding-right:10px;color:var(--hl-color)}#article-container figure.highlight .caption a:hover,#article-container figure.highlight figcaption a:hover{border-bottom-color:var(--hl-color)}#article-container .highlight-tools{position:relative;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;overflow:hidden;min-height:24px;height:2.15em;background:var(--hltools-bg);color:var(--hltools-color);font-size:var(--global-font-size)}#article-container .highlight-tools.closed~*{display:none}#article-container .highlight-tools .expand{position:absolute;padding:.57em .7em;cursor:pointer;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#article-container .highlight-tools .expand+.code-lang{left:1.7em}#article-container .highlight-tools .expand.closed{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:rotate(-90deg)!important;-moz-transform:rotate(-90deg)!important;-o-transform:rotate(-90deg)!important;-ms-transform:rotate(-90deg)!important;transform:rotate(-90deg)!important}#article-container .highlight-tools .code-lang{position:absolute;left:14px;text-transform:uppercase;font-weight:700;font-size:1.15em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#article-container .highlight-tools .copy-notice{position:absolute;right:2.4em;opacity:0;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s;transition:opacity .4s}#article-container .highlight-tools .copy-button{position:absolute;right:14px;cursor:pointer;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}#article-container .highlight-tools .copy-button:hover{color:#49b1f5}#article-container .gutter{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#article-container .gist table{width:auto}#article-container .gist table td{border:none}#article-container figure.highlight{margin:0 0 24px;border-radius:7px;-webkit-box-shadow:0 5px 10px 0 rgba(144,164,174,.4);box-shadow:0 5px 10px 0 rgba(144,164,174,.4);-webkit-transform:translateZ(0)}#article-container figure.highlight .highlight-tools:after{position:absolute;left:14px;width:12px;height:12px;border-radius:50%;background:#fc625d;-webkit-box-shadow:20px 0 #fdbc40,40px 0 #35cd4b;box-shadow:20px 0 #fdbc40,40px 0 #35cd4b;content:' '}#article-container figure.highlight .highlight-tools .expand{right:0}#article-container figure.highlight .highlight-tools .expand.closed{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:rotate(90deg)!important;-moz-transform:rotate(90deg)!important;-o-transform:rotate(90deg)!important;-ms-transform:rotate(90deg)!important;transform:rotate(90deg)!important}#article-container figure.highlight .highlight-tools .expand~.copy-notice{right:3.45em}#article-container figure.highlight .highlight-tools .expand~.copy-button{right:2.1em}#article-container figure.highlight .highlight-tools .code-lang{left:75px}#article-container .code-expand-btn{position:absolute;bottom:0;z-index:10;width:100%;background:var(--hlexpand-bg);text-align:center;font-size:var(--global-font-size);cursor:pointer}#article-container .code-expand-btn i{padding:6px 0;color:var(--hlnumber-color);-webkit-animation:code-expand-key 1.2s infinite;-moz-animation:code-expand-key 1.2s infinite;-o-animation:code-expand-key 1.2s infinite;-ms-animation:code-expand-key 1.2s infinite;animation:code-expand-key 1.2s infinite}#article-container .code-expand-btn.expand-done>i{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#article-container .code-expand-btn.expand-done+pre,#article-container .code-expand-btn.expand-done+table{margin-bottom:1.8em}#article-container .code-expand-btn:not(.expand-done)~pre,#article-container .code-expand-btn:not(.expand-done)~table{overflow:hidden;height:500px}@-moz-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@-webkit-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@-o-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}.article-sort{margin-left:10px;padding-left:20px;border-left:2px solid #aadafa}.article-sort-title{position:relative;margin-left:10px;padding-bottom:20px;padding-left:20px;font-size:1.72em}.article-sort-title:hover:before{border-color:var(--pseudo-hover)}.article-sort-title:before{position:absolute;top:calc(((100% - 36px)/ 2));left:-9px;z-index:1;width:10px;height:10px;border:5px solid #49b1f5;border-radius:10px;background:var(--card-bg);content:'';line-height:10px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-title:after{position:absolute;bottom:0;left:0;z-index:0;width:2px;height:1.5em;background:#aadafa;content:''}.article-sort-item{position:relative;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;margin:0 0 20px 10px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-item:hover:before{border-color:var(--pseudo-hover)}.article-sort-item:before{position:absolute;left:calc(-20px - 17px);width:6px;height:6px;border:3px solid #49b1f5;border-radius:6px;background:var(--card-bg);content:'';-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-item.no-article-cover{height:80px}.article-sort-item.no-article-cover .article-sort-item-info{padding:0}.article-sort-item.year{font-size:1.43em}.article-sort-item.year:hover:before{border-color:#49b1f5}.article-sort-item.year:before{border-color:var(--pseudo-hover)}.article-sort-item-time{color:#858585;font-size:95%}.article-sort-item-time time{padding-left:6px;cursor:default}.article-sort-item-title{color:var(--font-color);font-size:1.1em;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-line-clamp:2}.article-sort-item-title:hover{color:#49b1f5;-webkit-transform:translateX(10px);-moz-transform:translateX(10px);-o-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}.article-sort-item-img{overflow:hidden;width:80px;height:80px}.article-sort-item-info{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 16px}.category-lists .category-title{font-size:2.57em}@media screen and (max-width:768px){.category-lists .category-title{font-size:2em}}.category-lists .category-list{margin-bottom:0}.category-lists .category-list a{color:var(--font-color)}.category-lists .category-list a:hover{color:#49b1f5}.category-lists .category-list .category-list-count{margin-left:8px;color:#858585}.category-lists .category-list .category-list-count:before{content:'('}.category-lists .category-list .category-list-count:after{content:')'}.category-lists ul{padding:0 0 0 20px}.category-lists ul ul{padding-left:4px}.category-lists ul li{position:relative;margin:6px 0;padding:.12em .4em .12em 1.4em}#body-wrap{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:100vh}@media screen and (max-width:900px){.layout{-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.layout .card-widget:not(#card-toc){display:none}}@media screen and (min-width:2000px){.layout{max-width:1500px}}.layout>div:first-child:not(.recent-posts){-webkit-align-self:flex-start;align-self:flex-start;-ms-flex-item-align:start;padding:50px 40px}@media screen and (max-width:768px){.layout>div:first-child:not(.recent-posts){padding:36px 14px}}.layout>div:first-child{width:74%;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}@media screen and (max-width:900px){.layout>div:first-child{width:100%!important}.layout>div:first-child .card-widget:not(#card-toc){display:none}}@media screen and (min-width:900px){.layout>div:first-child{-webkit-box-ordinal-group:2;-moz-box-ordinal-group:2;-o-box-ordinal-group:2;-ms-flex-order:2;-webkit-order:2;order:2}}@media screen and (min-width:2000px){.layout.hide-aside{max-width:1300px}}.layout.hide-aside>div{width:100%!important}.apple #page-header.full_page{background-attachment:scroll!important}.apple .avatar-img,.apple .flink-item-icon,.apple .recent-post-item{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}#article-container .flink{margin-bottom:20px}#article-container .flink .flink-list{overflow:auto;padding:10px 10px 0;text-align:center}#article-container .flink .flink-list>.flink-list-item{position:relative;float:left;overflow:hidden;margin:15px 7px;width:calc(100% / 3 - 15px);height:90px;border-radius:12px;line-height:17px;-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-transform:translateZ(0)}@media screen and (max-width:1024px){#article-container .flink .flink-list>.flink-list-item{width:calc(50% - 15px)!important}}@media screen and (max-width:600px){#article-container .flink .flink-list>.flink-list-item{width:calc(100% - 15px)!important}}#article-container .flink .flink-list>.flink-list-item:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;content:'';-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-transform:scale(0);-moz-transform:scale(0);-o-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}#article-container .flink .flink-list>.flink-list-item:active:before,#article-container .flink .flink-list>.flink-list-item:focus:before,#article-container .flink .flink-list>.flink-list-item:hover:before{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1);-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear}#article-container .flink .flink-list>.flink-list-item a{color:var(--font-color);text-decoration:none}#article-container .flink .flink-list>.flink-list-item a .flink-item-icon{float:left;overflow:hidden;margin:15px 10px;width:60px;height:60px;border-radius:35px;-webkit-transition:width .3s ease-out;-moz-transition:width .3s ease-out;-o-transition:width .3s ease-out;-ms-transition:width .3s ease-out;transition:width .3s ease-out}#article-container .flink .flink-list>.flink-list-item a .flink-item-icon img{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .3s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .3s;-o-transition:filter 375ms ease-in .2s,-o-transform .3s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .3s;transition:filter 375ms ease-in .2s,transform .3s;object-fit:cover}#article-container .flink .flink-list>.flink-list-item a .img-alt{display:none}#article-container .flink .flink-item-name{padding:16px 10px 0 0;height:40px;font-weight:700;font-size:1.43em}#article-container .flink .flink-item-desc{padding:16px 10px 16px 0;height:50px;font-size:.93em}#article-container .flink .flink-name{margin-bottom:5px;font-weight:700;font-size:1.5em}#recent-posts>.recent-post-item:not(:first-child){margin-top:20px}#recent-posts>.recent-post-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-o-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;overflow:hidden;height:18em}@media screen and (max-width:768px){#recent-posts>.recent-post-item{-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:auto}}#recent-posts>.recent-post-item:hover img.post_bg{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#recent-posts>.recent-post-item.ads-wrap{display:block!important;height:auto!important}#recent-posts>.recent-post-item .post_cover{overflow:hidden;width:44%;height:100%}@media screen and (max-width:768px){#recent-posts>.recent-post-item .post_cover{width:100%;height:230px}}#recent-posts>.recent-post-item .post_cover.right{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-o-box-ordinal-group:1;-ms-flex-order:1;-webkit-order:1;order:1}@media screen and (max-width:768px){#recent-posts>.recent-post-item .post_cover.right{-webkit-box-ordinal-group:0;-moz-box-ordinal-group:0;-o-box-ordinal-group:0;-ms-flex-order:0;-webkit-order:0;order:0}}#recent-posts>.recent-post-item>.recent-post-info{padding:0 40px;width:57%}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info{padding:20px 20px 30px;width:100%}}#recent-posts>.recent-post-item>.recent-post-info.no-cover{width:100%}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info.no-cover{padding:30px 20px}}#recent-posts>.recent-post-item>.recent-post-info>.article-title{color:var(--text-highlight-color);font-size:1.72em;line-height:1.4;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-line-clamp:2}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info>.article-title{font-size:1.43em}}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap{margin:6px 0;color:#858585;font-size:90%}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap>.post-meta-date{cursor:default}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .sticky{color:#ff7242}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap i{margin:0 4px 0 0}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-label{padding-right:4px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-separator{margin:0 6px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-link{margin:0 4px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap a{color:#858585}#recent-posts>.recent-post-item>.recent-post-info>.content{-webkit-line-clamp:2}.tag-cloud-list a{display:inline-block;padding:0 8px;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.tag-cloud-list a:hover{color:#49b1f5!important;-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}@media screen and (max-width:768px){.tag-cloud-list a{zoom:.85}}.tag-cloud-title{font-size:2.57em}@media screen and (max-width:768px){.tag-cloud-title{font-size:2em}}h1.page-title+.tag-cloud-list{text-align:left}#aside-content{width:26%}@media screen and (max-width:900px){#aside-content{width:100%}#aside-content .card-widget:not(#card-toc){display:none}}#aside-content>.card-widget:first-child{margin-top:0}@media screen and (max-width:900px){#aside-content>.card-widget:first-child{margin-top:20px}#aside-content>.card-widget:first-child .card-widget:not(#card-toc){display:none}}#aside-content .card-widget{position:relative;overflow:hidden;margin-top:20px;padding:20px 24px}@media screen and (max-width:768px){#aside-content .card-widget:not(#card-toc){display:none}}#aside-content .card-info .author-info__name{font-weight:500;font-size:1.57em}#aside-content .card-info .author-info__description{margin-top:-.42em}#aside-content .card-info .card-info-data{margin:4px 0 4px}#aside-content .card-info .card-info-social-icons{margin:6px 0 -6px}#aside-content .card-info .card-info-social-icons .social-icon{margin:0 10px;color:var(--font-color);font-size:1.4em}#aside-content .card-info .card-info-social-icons i{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#aside-content .card-info .card-info-social-icons i:hover{-webkit-transform:rotate(540deg);-moz-transform:rotate(540deg);-o-transform:rotate(540deg);-ms-transform:rotate(540deg);transform:rotate(540deg)}#aside-content .card-info #card-info-btn{display:block;margin-top:14px;background-color:#f05012;color:var(--btn-color);text-align:center;line-height:2.4}#aside-content .card-info #card-info-btn:hover{background-color:var(--btn-hover-color)}#aside-content .card-info #card-info-btn span{padding-left:10px}#aside-content .item-headline{padding-bottom:6px;font-size:1.2em}#aside-content .item-headline span{margin-left:6px}@media screen and (min-width:900px){#aside-content .sticky_layout{position:sticky;position:-webkit-sticky;top:20px;-webkit-transition:top .3s;-moz-transition:top .3s;-o-transition:top .3s;-ms-transition:top .3s;transition:top .3s}}#aside-content .card-tag-cloud a{display:inline-block;padding:0 4px}#aside-content .aside-list>span{display:block;margin-bottom:10px;text-align:center}#aside-content .aside-list>.aside-list-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:6px 0}#aside-content .aside-list>.aside-list-item:first-child{padding-top:0}#aside-content .aside-list>.aside-list-item:not(:last-child){border-bottom:1px dashed #f5f5f5}#aside-content .aside-list>.aside-list-item:last-child{padding-bottom:0}#aside-content .aside-list>.aside-list-item .thumbnail{overflow:hidden;width:4.2em;height:4.2em}#aside-content .aside-list>.aside-list-item .content{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-left:10px;word-break:break-all}#aside-content .aside-list>.aside-list-item .content>.name{-webkit-line-clamp:1}#aside-content .aside-list>.aside-list-item .content>.name,#aside-content .aside-list>.aside-list-item .content>time{display:block;color:#858585;font-size:85%}#aside-content .aside-list>.aside-list-item .content>.comment,#aside-content .aside-list>.aside-list-item .content>.title{color:var(--font-color);font-size:95%;line-height:1.5;-webkit-line-clamp:2}#aside-content .aside-list>.aside-list-item .content>.comment:hover,#aside-content .aside-list>.aside-list-item .content>.title:hover{color:#49b1f5}#aside-content .aside-list>.aside-list-item.no-cover{min-height:4.4em}#aside-content .card-archives ul.card-archive-list,#aside-content .card-categories ul.card-category-list{margin:0;padding:0;list-style:none}#aside-content .card-archives ul.card-archive-list>.card-archive-list-item a span:first-child,#aside-content .card-categories ul.card-category-list>.card-category-list-item a span:first-child{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}#aside-content .card-categories .card-category-list.child{padding:0 0 0 16px}#aside-content .card-categories .card-category-list>.parent>a .card-category-list-name{width:70%!important}#aside-content .card-categories .card-category-list>.parent>a .card-category-list-count{width:calc(100% - 70% - 20px);text-align:right}#aside-content .card-categories .card-category-list>.parent i{float:right;margin-right:-.5em;padding:.5em;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}#aside-content .card-categories .card-category-list>.parent i.expand{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}#aside-content .card-webinfo .webinfo .webinfo-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:2px 10px 0}#aside-content .card-webinfo .webinfo .webinfo-item div:first-child{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-right:20px}@media screen and (min-width:901px){#aside-content #card-toc{right:0!important}}@media screen and (max-width:900px){#aside-content #card-toc{position:fixed;right:-100%;bottom:30px;z-index:100;max-width:380px;max-height:calc(100% - 60px);width:calc(100% - 80px);opacity:0;-webkit-transition:initial;-moz-transition:initial;-o-transition:initial;-ms-transition:initial;transition:initial;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-o-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom}#aside-content #card-toc .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-percentage{float:right;margin-top:-9px;color:#a9a9a9;font-style:italic;font-size:140%}#aside-content #card-toc .toc-content{overflow-y:scroll;overflow-y:overlay;margin:0 -24px;max-height:calc(100vh - 120px)}@media screen and (max-width:900px){#aside-content #card-toc .toc-content{max-height:calc(100vh - 140px)}#aside-content #card-toc .toc-content .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-content>*>.toc-item>.toc-child{margin-left:10px;padding-left:10px;border-left:1px solid var(--dark-grey)}#aside-content #card-toc .toc-content:not(.is-expand) .toc-child{display:none}@media screen and (max-width:900px){#aside-content #card-toc .toc-content:not(.is-expand) .toc-child{display:block!important}#aside-content #card-toc .toc-content:not(.is-expand) .toc-child .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child{display:block}#aside-content #card-toc .toc-content li,#aside-content #card-toc .toc-content ol{list-style:none}#aside-content #card-toc .toc-content>ol{padding:0!important}#aside-content #card-toc .toc-content ol{margin:0;padding-left:18px}#aside-content #card-toc .toc-content .toc-link{display:block;margin:4px 0;padding:1px 6px;color:var(--toc-link-color);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#aside-content #card-toc .toc-content .toc-link:hover{color:#f05011}#aside-content #card-toc .toc-content .toc-link.active{background:#f05011;color:#fff}#aside-content :only-child>.card-widget{margin-top:0}#aside-content .card-more-btn{float:right;color:inherit}#aside-content .card-more-btn:hover{-webkit-animation:more-btn-move 1s infinite;-moz-animation:more-btn-move 1s infinite;-o-animation:more-btn-move 1s infinite;-ms-animation:more-btn-move 1s infinite;animation:more-btn-move 1s infinite}#aside-content .card-announcement .item-headline i{color:red}.avatar-img{overflow:hidden;margin:0 auto;width:110px;height:110px;border-radius:70px}.avatar-img img{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .3s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .3s;-o-transition:filter 375ms ease-in .2s,-o-transform .3s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .3s;transition:filter 375ms ease-in .2s,transform .3s;object-fit:cover}.avatar-img img:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}.site-data{display:table;width:100%;table-layout:fixed}.site-data>a{display:table-cell}.site-data>a div{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.site-data>a:hover div{color:#f05012!important}.site-data>a .headline{color:var(--font-color)}.site-data>a .length-num{margin-top:-.32em;color:var(--text-highlight-color);font-size:1.4em}@media screen and (min-width:900px){html.hide-aside .layout{-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}html.hide-aside .layout>.aside-content{display:none}html.hide-aside .layout>div:first-child{width:80%}}.page .sticky_layout{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}@-moz-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-webkit-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-o-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-moz-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-webkit-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-o-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-moz-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-webkit-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-o-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}#calendar a{text-decoration:none}.cal-head{position:relative;height:20px;padding:8px 6px 2px 6px;margin-bottom:15px}.cal-next,.cal-prev{position:absolute;top:9px;width:9px;height:10px;padding:3px 4px;border:1px solid transparent;color:#333;outline:0}.cal-prev{left:8px}.cal-prev:before{border-right:9px solid #333}.cal-next{right:8px}.cal-next:before{border-left:9px solid #333}.cal-next:before,.cal-prev:before{content:'';display:block;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent}.cal-title{width:120px;margin:0 auto;color:#333;font:bold 14px/18px Arial;text-align:center}.cal-title a{border:1px solid transparent;color:#f76b61}.cal,.cal td,.cal th{border:none}.cal{border-collapse:collapse;border-spacing:0;table-layout:fixed;width:100%;margin:0}.cal th{background:rgba(0,0,0,0);color:#000;font-weight:900!important}.cal tbody a{background-color:#f76b61;color:#fff;display:block;font-weight:700;border:1px solid #fff}.cal tbody .cal-today{background-color:#ffdfdd;color:#f76b61}.cal .cal-gray{color:#ddd}.cal td,.cal th{font-weight:400;line-height:2.5625;padding:0;text-align:center}.cal .cal-foot:focus,.cal .cal-foot:hover,.cal-next:hover,.cal-prev:hover,.cal-title a:hover{cursor:pointer;background-color:transparent;cursor:pointer;color:#42d3d8}.cal tbody a:focus,.cal tbody a:hover{background-color:#ffdfdd;color:#fff;cursor:pointer}#categoryBar{width:100%!important}ul.categoryBar-list{margin:5px 5px 0 5px!important;padding:0!important}li.categoryBar-list-item{font-weight:700;display:inline-block;height:180px!important;margin:5px .5% 0 .5%!important;background-image:-webkit-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-moz-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-o-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-ms-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);border-radius:10px;padding:25px 0 25px 25px!important;-webkit-box-shadow:rgba(50,50,50,.3) 50px 50px 50px 50px inset;box-shadow:rgba(50,50,50,.3) 50px 50px 50px 50px inset;overflow:hidden;background-size:100%!important;background-position:center!important}li.categoryBar-list-item:hover{background-size:110%!important;-webkit-box-shadow:inset 500px 50px 50px 50px rgba(50,50,50,.6);box-shadow:inset 500px 50px 50px 50px rgba(50,50,50,.6)}li.categoryBar-list-item:hover span.categoryBar-list-count::after{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-o-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}a.categoryBar-list-link{color:#fff!important;font-size:20px!important}a.categoryBar-list-link::before{content:'|'!important;color:#fff!important;font-size:20px!important}a.categoryBar-list-link:after{content:'';position:relative;width:0;bottom:0;display:block;height:3px;border-radius:3px;background-color:#fff}a.categoryBar-list-link:hover:after{width:90%;left:1%;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}span.categoryBar-list-count{display:block!important;color:#fff!important;font-size:20px!important}span.categoryBar-list-count::before{content:'\f02d'!important;padding-right:15px!important}span.categoryBar-list-count::after{padding:5px;display:block!important;color:#fff!important;font-size:20px!important;position:relative;right:-100%}li.categoryBar-list-item:nth-child(1){background:rgba(255,20,200,.6)}li.categoryBar-list-item:nth-child(2){background:rgba(255,40,40,.6)}li.categoryBar-list-item:nth-child(3){background:rgba(112,235,12,.6)}li.categoryBar-list-item:nth-child(4){background:rgba(235,146,12,.6)}li.categoryBar-list-item:nth-child(5){background:rgba(12,135,235,.6)}li.categoryBar-list-item:nth-child(6){background:#425aef88}li.categoryBar-list-item:nth-child(7){background:#ed709b88}li.categoryBar-list-item:nth-child(8){background:#79b8ff}li.categoryBar-list-item:nth-child(9){background:#6d5493}li.categoryBar-list-item:nth-child(10){background:#ed9090}li.categoryBar-list-item:nth-child(11){background:#d9b44f}li.categoryBar-list-item:nth-child(12){background:#1ea4df}li.categoryBar-list-item:nth-child(1)>span::after{content:'3D打印分享'!important}li.categoryBar-list-item:nth-child(2)>span::after{content:'Hexo魔改教程'!important}li.categoryBar-list-item:nth-child(3)>span::after{content:'自己的杂谈和事情'!important}li.categoryBar-list-item:nth-child(4)>span::after{content:'白嫖党万岁!'!important}li.categoryBar-list-item:nth-child(5)>span::after{content:'一些教程'!important}li.categoryBar-list-item:nth-child(6)>span::after{content:'解决一些bug与避坑'!important}li.categoryBar-list-item{width:32.3%!important}@media screen and (max-width:650px){li.categoryBar-list-item{width:48%!important;height:150px!important;margin:5px 1% 0 1%!important}}.categoryBar-list{max-height:380px;overflow:auto}.categoryBar-list::-webkit-scrollbar{width:0!important}@media screen and (max-width:650px){.categoryBar-list{max-height:320px}}.fixed-card-widget:not(#card-toc){visibility:visible!important;display:block!important;position:fixed!important;bottom:0;left:0;top:0;right:0;margin:auto;margin-bottom:auto!important;margin-top:auto!important;max-width:300px;max-height:500px;width:auto;height:fit-content;z-index:999;-webkit-animation:rotateX .5s ease;-moz-animation:rotateX .5s ease;-o-animation:rotateX .5s ease;-ms-animation:rotateX .5s ease;animation:rotateX .5s ease;-webkit-animation-fill-mode:forwards;-moz-animation-fill-mode:forwards;-o-animation-fill-mode:forwards;-ms-animation-fill-mode:forwards;animation-fill-mode:forwards}.card-shuo.fixed-card-widget #artitalk_main{max-height:460px;overflow:scroll}.card-shuo.fixed-card-widget #artitalk_main::-webkit-scrollbar{display:none}.card-shuo.fixed-card-widget #operare_artitalk .c2{z-index:1000}.card-tags.fixed-card-widget .card-tag-cloud{max-height:460px;overflow:scroll}.card-tags.fixed-card-widget .card-tag-cloud::-webkit-scrollbar{display:none}@media screen and (max-width:900px){div#fixedcard-dashboard{display:-webkit-box!important;display:-moz-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:box!important;display:flex!important}}div#fixedcard-dashboard{position:fixed;top:150px;width:fit-content;height:40px;opacity:.3;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;display:none;background:rgba(255,255,255,.9);padding:5px 10px;border-top-right-radius:20px;border-bottom-right-radius:20px;z-index:1000}div#fixedcard-dashboard:hover{opacity:1;-ms-filter:none;filter:none}div#fixedcard-dashboard:hover button.fixedcard-activebtn{width:30px;opacity:1;-ms-filter:none;filter:none;pointer-events:all}button.fixedcard-activebtn{width:0;height:30px;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;opacity:0;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:distribute;-moz-box-pack:distribute;-o-box-pack:distribute;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;pointer-events:none;color:#757273}.fixedcard-user-avatar{display:inline-block}.fixedcard-user-avatar img.fixedcard-user-avatar-img{width:30px;height:30px;border-radius:50%}[data-theme=dark] div#fixedcard-dashboard{background:rgba(55,55,55,.9)}[data-theme=dark] button.fixedcard-activebtn{color:#bcbdbd}div#quit-box{position:fixed;display:block;left:0;top:0;width:100vh;height:100vh;z-index:99;background:rgba(25,25,25,.3)}[data-theme=dark] div#quit-box{background:rgba(147,146,128,.3)}@-moz-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@-webkit-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@-o-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}.gitcalendar{border:1px solid #ddd;border-radius:3px;min-height:120px;text-align:center;margin:0 auto;border-width:0;width:100%;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;display:-webkit-flex;-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-lines:multiple;-moz-box-lines:multiple;-o-box-lines:multiple;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.gitcalendar img.spinner{width:70px;margin-top:50px;min-height:70px}.gitcalendar-graph text.month,.gitcalendar-graph text.wday{font-size:10px;fill:#aaa}.contrib-legend{text-align:right;padding:0 14px 10px 0;display:inline-block;float:right}.contrib-legend .legend{display:inline-block;list-style:none;margin:0 5px;position:relative;bottom:-1px;padding:0}.contrib-legend .legend li{display:inline-block;width:10px;height:10px}.text-small{font-size:12px;color:#767676}.gitcalendar-graph{padding:15px 0 0;text-align:center}.contrib-column{text-align:center;border-left:1px solid #ddd;border-top:1px solid #ddd;font-size:11px}.contrib-column-first{border-left:0}.table-column{padding:10px;display:table-cell;width:33%;vertical-align:top}.contrib-number{font-weight:300;line-height:1.3em;font-size:24px;display:block}.monospace{text-align:center;color:#000}.monospace a{color:#1d75ab;text-decoration:none}.contrib-footer{font-size:11px;padding:0 10px 12px;text-align:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:26px}.left.text-muted{float:left;margin-left:9px;color:#767676}.left.text-muted a{color:#4078c0;text-decoration:none}.left.text-muted a:hover,.monospace a:hover{text-decoration:underline}h2.f4.text-normal.mb-3{display:none}.float-left.text-gray{float:left}#user-activity-overview{display:none}.day-tooltip{white-space:nowrap;position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.85);border-radius:3px;display:none;pointer-events:none}.day-tooltip strong{color:#dfe2e5}.day-tooltip.is-visible{display:block}.day-tooltip:after{position:absolute;bottom:-10px;left:50%;width:5px;height:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.85)}.position-relative{width:100%;padding-left:20px;padding-right:20px}@media screen and (max-width:650px){.contrib-column{display:none}}.angle-wrapper{z-index:9999;display:inline;display:none;width:200px;height:40px;position:relative;padding:5px 0;background:rgba(0,0,0,.8);border-radius:8px;text-align:center;color:#fff}.angle-wrapper span{padding-bottom:1em}.angle-wrapper:before{content:'';width:0;height:0;border:10px solid transparent;border-top-color:rgba(0,0,0,.8);position:absolute;left:47.5%;top:100%}.angle-box{position:fixed;padding:10px}#page-header{position:relative;width:100%;background-color:#49b1f5;background-position:center center;background-size:cover;background-repeat:no-repeat;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}#page-header.full_page{height:300px;background-attachment:fixed}#page-header.full_page #site-info{position:absolute;top:43%;padding:0 10px;width:100%}#page-header #scroll-down .scroll-down-effects,#page-header #site-subtitle,#page-header #site-title{text-align:center;text-shadow:2px 2px 4px rgba(0,0,0,.15);line-height:1.5}#page-header #site-title{margin:0;color:var(--white);font-size:1.85em}@media screen and (min-width:768px){#page-header #site-title{font-size:2.85em}}@media screen and (min-width:768px){#page-header #site-subtitle{font-size:1.72em}}#page-header #site_social_icons{display:none;margin:0 auto;width:300px;text-align:center}@media screen and (max-width:768px){#page-header #site_social_icons{display:block}}#page-header #site_social_icons .social-icon{margin:0 10px;color:var(--light-grey);text-shadow:2px 2px 4px rgba(0,0,0,.15);font-size:1.43em}#page-header #scroll-down{position:absolute;bottom:0;width:100%;cursor:pointer}#page-header #scroll-down .scroll-down-effects{position:relative;width:100%;color:var(--light-grey);font-size:30px}#page-header.not-home-page{height:400px}@media screen and (max-width:768px){#page-header.not-home-page{height:280px}}#page-header #page-site-info{position:absolute;top:200px;padding:0 10px;width:100%}@media screen and (max-width:768px){#page-header #page-site-info{top:140px}}#page-header.post-bg{height:400px}@media screen and (max-width:768px){#page-header.post-bg{height:360px}}#page-header #post-info{position:absolute;bottom:100px;padding:0 8%;width:100%;text-align:center}@media screen and (max-width:900px){#page-header #post-info{bottom:30px;text-align:left}#page-header #post-info .card-widget:not(#card-toc){display:none}}@media screen and (max-width:768px){#page-header #post-info{bottom:100px;padding:0 22px}}#page-header.not-top-img{margin-bottom:10px;height:60px;background:0}#page-header.not-top-img #nav{background:rgba(255,255,255,.6);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,.6);box-shadow:0 5px 6px -5px rgba(133,133,133,.6)}#page-header.not-top-img #nav a{color:var(--font-color);text-shadow:none}#page-header.nav-fixed #nav{position:fixed;top:-60px;z-index:91;background:rgba(255,255,255,.6);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,.6);box-shadow:0 5px 6px -5px rgba(133,133,133,.6);-webkit-transition:-webkit-transform .2s ease-in-out,opacity .2s ease-in-out;-moz-transition:-moz-transform .2s ease-in-out,opacity .2s ease-in-out;-o-transition:-o-transform .2s ease-in-out,opacity .2s ease-in-out;-ms-transition:-ms-transform .2s ease-in-out,opacity .2s ease-in-out;transition:transform .2s ease-in-out,opacity .2s ease-in-out}#page-header.nav-fixed #nav #site-name,#page-header.nav-fixed #nav #toggle-menu,#page-header.nav-fixed #nav a{color:var(--font-color);text-shadow:none}#page-header.nav-fixed #nav #site-name:hover,#page-header.nav-fixed #nav #toggle-menu:hover,#page-header.nav-fixed #nav a:hover{color:#49b1f5}#page-header.nav-visible #nav{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}#page-header.nav-visible+.layout>.aside-content>.sticky_layout{top:70px;-webkit-transition:top .5s;-moz-transition:top .5s;-o-transition:top .5s;-ms-transition:top .5s;transition:top .5s}#page h1.page-title{margin:8px 0 20px}#post>#post-info{margin-bottom:30px}#post>#post-info .post-title{padding-bottom:4px;border-bottom:1px solid var(--light-grey);color:var(--text-highlight-color)}#post>#post-info .post-title .post-edit-link{float:right}#post>#post-info #post-meta,#post>#post-info #post-meta a{color:#78818a}#post-info .post-title{margin-bottom:8px;color:var(--white);font-weight:400;font-size:2.5em;line-height:1.5;-webkit-line-clamp:3}@media screen and (max-width:768px){#post-info .post-title{font-size:2.1em}}#post-info .post-title .post-edit-link{padding-left:10px}#post-info #post-meta{color:var(--light-grey);font-size:95%}@media screen and (min-width:768px){#post-info #post-meta>.meta-secondline>span:first-child{display:none}}@media screen and (max-width:768px){#post-info #post-meta{font-size:90%}#post-info #post-meta>.meta-firstline,#post-info #post-meta>.meta-secondline{display:inline}}#post-info #post-meta .post-meta-separator{margin:0 5px}#post-info #post-meta .post-meta-icon{margin-right:4px}#post-info #post-meta .post-meta-label{margin-right:4px}#post-info #post-meta a{color:var(--light-grey);-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}#post-info #post-meta a:hover{color:#49b1f5;text-decoration:underline}#nav{position:absolute;top:0;z-index:90;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:0 36px;width:100%;height:60px;font-size:1.3em;opacity:0;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}@media screen and (max-width:768px){#nav{padding:0 16px}}#nav.show{opacity:1;-ms-filter:none;filter:none}#nav #blog_name{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}#nav #toggle-menu{display:none;padding:2px 0 0 6px;vertical-align:top}#nav #toggle-menu:hover{color:var(--white)}#nav a{color:var(--light-grey)}#nav a:hover{color:var(--white)}#nav #site-name{text-shadow:2px 2px 4px rgba(0,0,0,.15);font-weight:700;cursor:pointer}#nav .menus_items{display:inline}#nav .menus_items .menus_item:hover .menus_item_child{display:block}#nav .menus_items .menus_item:hover>a>i:last-child{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#nav .menus_items .menus_item>a>i:last-child{padding:4px;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#nav .menus_items .menus_item .menus_item_child{position:absolute;right:0;display:none;margin-top:8px;padding:0;width:max-content;background-color:var(--sidebar-bg);-webkit-box-shadow:0 5px 20px -4px rgba(0,0,0,.5);box-shadow:0 5px 20px -4px rgba(0,0,0,.5);-webkit-animation:sub_menus .3s .1s ease both;-moz-animation:sub_menus .3s .1s ease both;-o-animation:sub_menus .3s .1s ease both;-ms-animation:sub_menus .3s .1s ease both;animation:sub_menus .3s .1s ease both;border-radius:5px}#nav .menus_items .menus_item .menus_item_child:before{position:absolute;top:-8px;left:0;width:100%;height:20px;content:''}#nav.hide-menu #toggle-menu{display:inline-block!important}#nav.hide-menu #toggle-menu .site-page{font-size:inherit}#nav.hide-menu .menus_items{display:none}#nav.hide-menu #search-button span{display:none}#nav #search-button{display:inline;padding:0 0 0 14px}#nav .site-page{position:relative;padding-bottom:6px;text-shadow:1px 1px 2px rgba(0,0,0,.3);font-size:.78em;cursor:pointer}#loading-box .loading-right-bg{right:0}#loading-box .spinner-box{position:fixed;z-index:1001;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;width:100%;height:100vh}#loading-box .spinner-box .configure-border-1{position:absolute;padding:3px;width:115px;height:115px;background:#ffab91;-webkit-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-moz-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-o-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-ms-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;animation:configure-clockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .configure-border-2{left:-115px;padding:3px;width:115px;height:115px;background:#3ff9dc;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-moz-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-o-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-ms-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;animation:configure-xclockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .loading-word{position:absolute;color:var(--preloader-color);font-size:16px}#loading-box .spinner-box .configure-core{width:100%;height:100%;background-color:var(--lyx-white-acrylic)}#loading-box.loaded .loading-left-bg{-webkit-transition:all .7s;-moz-transition:all .7s;-o-transition:all .7s;-ms-transition:all .7s;transition:all .7s;opacity:0}#loading-box.loaded .loading-right-bg{-webkit-transition:all .7s;-moz-transition:all .7s;-o-transition:all .7s;-ms-transition:all .7s;transition:all .7s;opacity:0}#loading-box.loaded .spinner-box{display:none}#loading-box.loaded #loadcat{display:none}#loading-box.loadend .loading-left-bg{display:none}#loading-box.loadend .loading-right-bg{display:none}@-moz-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@-webkit-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@-o-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}#pagination .pagination{margin-top:20px;text-align:center}#pagination .pagination-info{position:absolute;top:50%;padding:20px 40px;width:100%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}#pagination .next_info,#pagination .prev_info{color:var(--white);font-weight:500}#pagination .next-post .pagination-info{text-align:right}#pagination .pull-full{width:100%!important}#pagination .next-post .label,#pagination .prev-post .label{color:var(--light-grey);text-transform:uppercase;font-size:90%}#pagination .next-post,#pagination .prev-post{width:50%}@media screen and (max-width:768px){#pagination .next-post,#pagination .prev-post{width:100%}}#pagination .next-post a,#pagination .prev-post a{position:relative;display:block;overflow:hidden;height:150px}#pagination.pagination-post{overflow:hidden;margin-top:40px;width:100%;background:#000}.layout>.recent-posts .pagination>*{display:inline-block;margin:0 6px;width:2.5em;height:2.5em;line-height:2.5em}.layout>.recent-posts .pagination>:not(.space):hover{background:var(--btn-hover-color);color:var(--btn-color)}.layout>div:not(.recent-posts) .pagination .page-number{display:inline-block;margin:0 4px;min-width:24px;height:24px;text-align:center;line-height:24px;cursor:pointer}#article-container{word-wrap:break-word;overflow-wrap:break-word}#article-container a{color:#49b1f5}#article-container a:hover{text-decoration:underline}#article-container img{display:block;margin:0 auto 20px;max-width:100%;-webkit-transition:filter 375ms ease-in .2s;-moz-transition:filter 375ms ease-in .2s;-o-transition:filter 375ms ease-in .2s;-ms-transition:filter 375ms ease-in .2s;transition:filter 375ms ease-in .2s}#article-container p{margin:0 0 16px}#article-container iframe{margin:0 0 20px}#article-container kbd{margin:0 3px;padding:3px 5px;border:1px solid #b4b4b4;border-radius:3px;background-color:#f8f8f8;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),0 2px 1px 0 rgba(255,255,255,.6) inset;box-shadow:0 1px 3px rgba(0,0,0,.25),0 2px 1px 0 rgba(255,255,255,.6) inset;color:#34495e;white-space:nowrap;font-weight:600;font-size:.9em;font-family:Monaco,'Ubuntu Mono',monospace;line-height:1em}#article-container ol ol,#article-container ol ul,#article-container ul ol,#article-container ul ul{padding-left:20px}#article-container ol li,#article-container ul li{margin:4px 0}#article-container ol p,#article-container ul p{margin:0 0 8px}#article-container.post-content h1,#article-container.post-content h2,#article-container.post-content h3,#article-container.post-content h4,#article-container.post-content h5,#article-container.post-content h6{-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transition:all .2s ease-out}#article-container.post-content h1:before,#article-container.post-content h2:before,#article-container.post-content h3:before,#article-container.post-content h4:before,#article-container.post-content h5:before,#article-container.post-content h6:before{position:absolute;top:calc(50% - 7px);color:#f47466;content:'\f863';line-height:1;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transition:all .2s ease-out}#article-container.post-content h1:hover:before,#article-container.post-content h2:hover:before,#article-container.post-content h3:hover:before,#article-container.post-content h4:hover:before,#article-container.post-content h5:hover:before,#article-container.post-content h6:hover:before{color:#49b1f5}#article-container.post-content h1{padding-left:32px}#article-container.post-content h1:before{margin-left:-26px;font-size:20px}#article-container.post-content h1:hover{padding-left:38px}#article-container.post-content h2{padding-left:30px}#article-container.post-content h2:before{margin-left:-24px;font-size:18px}#article-container.post-content h2:hover{padding-left:36px}#article-container.post-content h3{padding-left:28px}#article-container.post-content h3:before{margin-left:-22px;font-size:16px}#article-container.post-content h3:hover{padding-left:34px}#article-container.post-content h4{padding-left:26px}#article-container.post-content h4:before{margin-left:-20px;font-size:14px}#article-container.post-content h4:hover{padding-left:32px}#article-container.post-content h5{padding-left:24px}#article-container.post-content h5:before{margin-left:-18px;font-size:12px}#article-container.post-content h5:hover{padding-left:30px}#article-container.post-content h6{padding-left:24px}#article-container.post-content h6:before{margin-left:-18px;font-size:12px}#article-container.post-content h6:hover{padding-left:30px}#article-container.post-content ol p,#article-container.post-content ul p{margin:0 0 8px}#article-container.post-content li::marker{color:#49b1f5;font-weight:600;font-size:1.05em}#article-container.post-content li:hover::marker{color:var(--pseudo-hover)}#article-container.post-content ul>li{list-style-type:circle}#article-container>:last-child{margin-bottom:0!important}#post .tag_share:after{display:block;clear:both;content:''}#post .tag_share .post-meta__tag-list{display:inline-block}#post .tag_share .post-meta__tags{display:inline-block;margin:8px 8px 8px 0;padding:0 12px;width:fit-content;border:1px solid #49b1f5;border-radius:12px;color:#49b1f5;font-size:.85em;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#post .tag_share .post-meta__tags:hover{background:#49b1f5;color:var(--white)}#post .tag_share .post_share{display:inline-block;float:right;margin:8px 0 0;width:fit-content}#post .tag_share .post_share .social-share{font-size:.85em}#post .tag_share .post_share .social-share .social-share-icon{margin:0 4px;width:1.85em;height:1.85em;font-size:1.2em;line-height:1.85em}#post .post-copyright{position:relative;margin:2rem 0 .5rem;padding:.5rem .8rem;border:1px solid #c9c9c9;-webkit-transition:box-shadow .3s ease-in-out;-moz-transition:box-shadow .3s ease-in-out;-o-transition:box-shadow .3s ease-in-out;-ms-transition:box-shadow .3s ease-in-out;transition:box-shadow .3s ease-in-out;overflow:hidden;border-radius:12px!important;background-color:#fff}#post .post-copyright:before{background:var(--heo-post-blockquote-bg);position:absolute;right:-26px;top:-120px;content:'\f25e';font-size:200px;font-family:'Font Awesome 5 Brands';opacity:.2}#post .post-copyright:hover{-webkit-box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5);box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5)}#post .post-copyright .post-copyright-info{padding-left:.3rem}#post .post-copyright .post-copyright-info a{text-decoration:none;word-break:break-word}#post .post-copyright .post-copyright-info a:hover{text-decoration:none}#post .post-copyright-cc-info{color:#49b1f5}#post .post-outdate-notice{position:relative;margin:0 0 1rem;padding:.5em 1.2em;border-radius:15px;background-color:#ffe6e6;color:#f66;padding:.5em 1em .5em 2.6em;border-left:5px solid #ff8080}#post .post-outdate-notice:before{position:absolute;top:50%;left:.9em;color:#ff8080;content:'\f071';-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#post .ads-wrap{margin:40px 0}.relatedPosts{margin-top:40px}.relatedPosts>.headline{margin-bottom:5px;font-weight:700;font-size:1.43em}.relatedPosts>.relatedPosts-list>div{position:relative;display:inline-block;overflow:hidden;margin:3px;width:calc(33.333% - 6px);height:200px;background:#000;vertical-align:bottom}@media screen and (max-width:768px){.relatedPosts>.relatedPosts-list>div{margin:2px;width:calc(50% - 4px);height:150px}}@media screen and (max-width:600px){.relatedPosts>.relatedPosts-list>div{width:calc(100% - 4px)}}.relatedPosts>.relatedPosts-list .content{position:absolute;top:50%;padding:0 20px;width:100%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.relatedPosts>.relatedPosts-list .content .date{color:var(--light-grey);font-size:90%}.relatedPosts>.relatedPosts-list .content .title{color:var(--white);-webkit-line-clamp:2}.post-reward{position:relative;margin-top:80px;width:100%;text-align:center;pointer-events:none}.post-reward>*{pointer-events:auto}.post-reward .reward-button{display:inline-block;padding:4px 24px;background:var(--btn-bg);color:var(--btn-color);cursor:pointer}.post-reward:hover .reward-button{background:var(--btn-hover-color)}.post-reward:hover>.reward-main{display:block}.post-reward .reward-main{position:absolute;bottom:40px;left:0;z-index:100;display:none;padding:0 0 15px;width:100%}.post-reward .reward-main .reward-all{display:inline-block;margin:0;padding:20px 10px;border-radius:4px;background:var(--reward-pop)}.post-reward .reward-main .reward-all:before{position:absolute;bottom:-10px;left:0;width:100%;height:20px;content:''}.post-reward .reward-main .reward-all:after{position:absolute;right:0;bottom:2px;left:0;margin:0 auto;width:0;height:0;border-top:13px solid var(--reward-pop);border-right:13px solid transparent;border-left:13px solid transparent;content:''}.post-reward .reward-main .reward-all .reward-item{display:inline-block;padding:0 8px;list-style-type:none;vertical-align:top}.post-reward .reward-main .reward-all .reward-item img{width:130px;height:130px}.post-reward .reward-main .reward-all .reward-item .post-qr-code-desc{width:130px;color:#858585}#rightside #rightside-config-hide{height:0;opacity:0;-webkit-transition:-webkit-transform .4s;-moz-transition:-moz-transform .4s;-o-transition:-o-transform .4s;-ms-transition:-ms-transform .4s;transition:transform .4s;-webkit-transform:translate(45px,0);-moz-transform:translate(45px,0);-o-transform:translate(45px,0);-ms-transform:translate(45px,0);transform:translate(45px,0)}#rightside #rightside-config-hide.show{height:auto;opacity:1;-ms-filter:none;filter:none;-webkit-transform:translate(0,0);-moz-transform:translate(0,0);-o-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}#rightside #rightside-config-hide.status{height:auto;opacity:1;-ms-filter:none;filter:none}#rightside>div>a:hover,#rightside>div>button:hover{background-color:var(--btn-hover-color)}#rightside #mobile-toc-button{display:none}@media screen and (max-width:900px){#rightside #mobile-toc-button{display:block}#rightside #mobile-toc-button .card-widget:not(#card-toc){display:none}}@media screen and (max-width:900px){#rightside #hide-aside-btn{display:none}#rightside .card-widget:not(#card-toc){display:none}}#sidebar #menu-mask{position:fixed;z-index:102;display:none;width:100%;height:100%;background:rgba(0,0,0,.8)}#sidebar #sidebar-menus.open{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);-o-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}#sidebar #sidebar-menus>.avatar-img{margin:20px auto}#sidebar #sidebar-menus .sidebar-site-data{padding:0 10px}#sidebar #sidebar-menus hr{margin:20px auto}#sidebar #sidebar-menus .menus_items{padding:0 10px 40px}#sidebar #sidebar-menus .menus_items .site-page:hover{background:#f05011}#sidebar #sidebar-menus .menus_items .site-page i:first-child{width:15%;text-align:left}#sidebar #sidebar-menus .menus_items .site-page.group>i:last-child{position:absolute;top:.78em;right:18px;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#sidebar #sidebar-menus .menus_items .site-page.group.hide>i:last-child{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}#sidebar #sidebar-menus .menus_items .site-page.group.hide+.menus_item_child{display:none}#sidebar #sidebar-menus .menus_items .menus_item_child{margin:0;list-style:none}#vcomment{font-size:1.1em}#vcomment .vbtn{border:none;background:var(--btn-bg);color:var(--btn-color)}#vcomment .vbtn:hover{background:var(--btn-hover-color)}#vcomment .vimg{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#vcomment .vimg:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}#vcomment .vcards .vcard .vcontent.expand:after,#vcomment .vcards .vcard .vcontent.expand:before{z-index:22}#waline-wrap{--waline-font-size:1.1em;--waline-theme-color:#49b1f5;--waline-active-color:#ff7242}#waline-wrap .vuser{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}#waline-wrap .vuser:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}.fireworks{position:fixed;top:0;left:0;z-index:-1;pointer-events:none}.medium-zoom-image--opened{z-index:99999!important;margin:0!important}.medium-zoom-overlay{z-index:99999!important}.mermaid-wrap{margin:0 0 20px;text-align:center}.mermaid-wrap>svg{height:100%}.fb-comments iframe,.utterances{width:100%!important}#gitalk-container .gt-meta{margin:0 0 .8em;padding:6px 0 16px}.katex-wrap{overflow:auto}.katex-wrap::-webkit-scrollbar{display:none}.has-jax,mjx-container[display]{overflow-x:auto;overflow-y:hidden;line-height:normal!important}.aplayer{color:#4c4948}#article-container .aplayer{margin:0 0 20px}#article-container .aplayer ol,#article-container .aplayer ul{margin:0;padding:0}#article-container .aplayer ol li,#article-container .aplayer ul li{margin:0;padding:0 15px}#article-container .aplayer ol li:before,#article-container .aplayer ul li:before{content:none}.snackbar-css{border-radius:5px!important}#article-container .btn-center{margin:0 0 20px;text-align:center}#article-container .btn-beautify{display:inline-block;margin:0 4px 6px;padding:0 15px;background-color:var(--btn-beautify-color,#777);color:#fff;line-height:2}#article-container .btn-beautify.blue{--btn-beautify-color:#428bca}#article-container .btn-beautify.pink{--btn-beautify-color:#ff69b4}#article-container .btn-beautify.red{--btn-beautify-color:#f00}#article-container .btn-beautify.purple{--btn-beautify-color:#6f42c1}#article-container .btn-beautify.orange{--btn-beautify-color:#ff8c00}#article-container .btn-beautify.green{--btn-beautify-color:#5cb85c}#article-container .btn-beautify:hover{background-color:var(--btn-hover-color)}#article-container .btn-beautify i+span{margin-left:6px}#article-container .btn-beautify:not(.block)+.btn-beautify:not(.block){margin:0 4px 20px}#article-container .btn-beautify.block{display:block;margin:0 0 20px;width:fit-content;width:-moz-fit-content}#article-container .btn-beautify.block.center{margin:0 auto 20px}#article-container .btn-beautify.block.right{margin:0 0 20px auto}#article-container .btn-beautify.larger{padding:6px 15px}#article-container .btn-beautify:hover{text-decoration:none}#article-container .btn-beautify.outline{border:1px solid transparent;border-color:var(--btn-beautify-color,#777);background-color:transparent;color:var(--btn-beautify-color,#777)}#article-container .btn-beautify.outline:hover{background-color:var(--btn-beautify-color,#777)}#article-container .btn-beautify.outline:hover{color:#fff!important}#article-container figure.gallery-group{position:relative;float:left;overflow:hidden;margin:6px 4px;width:calc(50% - 8px);height:250px;border-radius:12px;background:#000;-webkit-transform:translate3d(0,0,0)}@media screen and (max-width:600px){#article-container figure.gallery-group{width:calc(100% - 8px)}}#article-container figure.gallery-group:hover img{opacity:.4;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group:hover .gallery-group-name::after{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group:hover p{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group img{position:relative;margin:0;max-width:none;width:calc(100% + 20px);height:250px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;opacity:.8;-webkit-transition:all .3s,filter 375ms ease-in .2s;-moz-transition:all .3s,filter 375ms ease-in .2s;-o-transition:all .3s,filter 375ms ease-in .2s;-ms-transition:all .3s,filter 375ms ease-in .2s;transition:all .3s,filter 375ms ease-in .2s;-webkit-transform:translate3d(-10px,0,0);-moz-transform:translate3d(-10px,0,0);-o-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0);object-fit:cover}#article-container figure.gallery-group figcaption{position:absolute;top:0;left:0;padding:30px;width:100%;height:100%;color:#fff;text-transform:uppercase;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}#article-container figure.gallery-group figcaption>a{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000;opacity:0}#article-container figure.gallery-group p{margin:0;padding:8px 0 0;letter-spacing:1px;font-size:1.1em;line-height:1.5;opacity:0;-webkit-transition:opacity .35s,-webkit-transform .35s;-moz-transition:opacity .35s,-moz-transform .35s;-o-transition:opacity .35s,-o-transform .35s;-ms-transition:opacity .35s,-ms-transform .35s;transition:opacity .35s,transform .35s;-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);-o-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-line-clamp:4}#article-container figure.gallery-group .gallery-group-name{position:relative;margin:0;padding:8px 0;font-weight:700;font-size:1.65em;line-height:1.5;-webkit-line-clamp:2}#article-container figure.gallery-group .gallery-group-name:after{position:absolute;bottom:0;left:0;width:100%;height:2px;background:#fff;content:'';-webkit-transition:-webkit-transform .35s;-moz-transition:-moz-transform .35s;-o-transition:-o-transform .35s;-ms-transition:-ms-transform .35s;transition:transform .35s;-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);-o-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}#article-container .gallery-group-main{overflow:auto;padding:0 0 16px}#article-container .fj-gallery{margin:0 0 16px;opacity:0}#article-container .fj-gallery .img-alt{display:none}blockquote.pullquote{position:relative;max-width:45%;font-size:110%}blockquote.pullquote.left{float:left;margin:1em .5em 0 0}blockquote.pullquote.right{float:right;margin:1em 0 0 .5em}.video-container{position:relative;overflow:hidden;margin-bottom:16px;padding-top:56.25%;height:0}.video-container iframe{position:absolute;top:0;left:0;margin-top:0;width:100%;height:100%}.hide-block>.hide-button,.hide-inline>.hide-button{display:inline-block;padding:5px 18px;background:#49b1f5;color:var(--white)}.hide-block>.hide-button:hover,.hide-inline>.hide-button:hover{background-color:var(--btn-hover-color)}.hide-block>.hide-button.open,.hide-inline>.hide-button.open{display:none}.hide-block>.hide-button.open+div,.hide-inline>.hide-button.open+div{display:block}.hide-block>.hide-button.open+span,.hide-inline>.hide-button.open+span{display:inline}.hide-block>.hide-content,.hide-inline>.hide-content{display:none}.hide-inline>.hide-button{margin:0 6px}.hide-inline>.hide-content{margin:0 6px}.hide-block{margin:0 0 16px}.toggle{margin-bottom:20px;border:1px solid #f0f0f0}.toggle>.toggle-button{padding:6px 15px;background:#f0f0f0;color:#1f2d3d;cursor:pointer}.toggle>.toggle-content{margin:30px 24px}#article-container .inline-img{display:inline;margin:0 3px;height:1.1em;vertical-align:text-bottom}.hl-label{padding:2px 4px;border-radius:3px;color:#fff}.hl-label.default{background-color:#777}.hl-label.blue{background-color:#428bca}.hl-label.pink{background-color:#ff69b4}.hl-label.red{background-color:red}.hl-label.purple{background-color:#6f42c1}.hl-label.orange{background-color:#ff8c00}.hl-label.green{background-color:#5cb85c}.note{position:relative;margin:0 0 20px;padding:15px;border-radius:5px}.note.icon{padding-left:3em}.note>.note-icon{position:absolute;top:calc(50% - .5em);left:.8em;font-size:larger}.note.blue:not(.disabled){border-left-color:#428bca!important}.note.blue:not(.disabled).modern{border-left-color:transparent!important;color:#428bca}.note.blue:not(.disabled):not(.simple){background:#e3eef7!important}.note.blue>.note-icon{color:#428bca}.note.pink:not(.disabled){border-left-color:#ff69b4!important}.note.pink:not(.disabled).modern{border-left-color:transparent!important;color:#ff69b4}.note.pink:not(.disabled):not(.simple){background:#ffe9f4!important}.note.pink>.note-icon{color:#ff69b4}.note.red:not(.disabled){border-left-color:red!important}.note.red:not(.disabled).modern{border-left-color:transparent!important;color:red}.note.red:not(.disabled):not(.simple){background:#ffd9d9!important}.note.red>.note-icon{color:red}.note.purple:not(.disabled){border-left-color:#6f42c1!important}.note.purple:not(.disabled).modern{border-left-color:transparent!important;color:#6f42c1}.note.purple:not(.disabled):not(.simple){background:#e9e3f6!important}.note.purple>.note-icon{color:#6f42c1}.note.orange:not(.disabled){border-left-color:#ff8c00!important}.note.orange:not(.disabled).modern{border-left-color:transparent!important;color:#ff8c00}.note.orange:not(.disabled):not(.simple){background:#ffeed9!important}.note.orange>.note-icon{color:#ff8c00}.note.green:not(.disabled){border-left-color:#5cb85c!important}.note.green:not(.disabled).modern{border-left-color:transparent!important;color:#5cb85c}.note.green:not(.disabled):not(.simple){background:#e7f4e7!important}.note.green>.note-icon{color:#5cb85c}.note.simple{border:1px solid #eee;border-left-width:5px}.note.modern{border:1px solid transparent!important;background-color:#f5f5f5;color:#4c4948}.note.flat{border:initial;border-left:5px solid #eee;background-color:#f9f9f9;color:#4c4948}.note h2,.note h3,.note h4,.note h5,.note h6{margin-top:3px;margin-bottom:0;padding-top:0!important;border-bottom:initial}.note blockquote:first-child,.note img:first-child,.note ol:first-child,.note p:first-child,.note pre:first-child,.note table:first-child,.note ul:first-child{margin-top:0!important}.note blockquote:last-child,.note img:last-child,.note ol:last-child,.note p:last-child,.note pre:last-child,.note table:last-child,.note ul:last-child{margin-bottom:0!important}.note:not(.no-icon){padding-left:3em}.note:not(.no-icon)::before{position:absolute;top:calc(50% - .95em);left:.8em;font-size:larger}.note.default.flat{background:#f7f7f7}.note.default.modern{border-color:#e1e1e1;background:#f3f3f3;color:#666}.note.default.modern a:not(.btn){color:#666}.note.default.modern a:not(.btn):hover{color:#454545}.note.default:not(.modern){border-left-color:#777}.note.default:not(.modern) h2,.note.default:not(.modern) h3,.note.default:not(.modern) h4,.note.default:not(.modern) h5,.note.default:not(.modern) h6{color:#777}.note.default:not(.no-icon)::before{content:'\f0a9'}.note.default:not(.no-icon):not(.modern)::before{color:#777}.note.primary.flat{background:#f5f0fa}.note.primary.modern{border-color:#e1c2ff;background:#f3daff;color:#6f42c1}.note.primary.modern a:not(.btn){color:#6f42c1}.note.primary.modern a:not(.btn):hover{color:#453298}.note.primary:not(.modern){border-left-color:#6f42c1}.note.primary:not(.modern) h2,.note.primary:not(.modern) h3,.note.primary:not(.modern) h4,.note.primary:not(.modern) h5,.note.primary:not(.modern) h6{color:#6f42c1}.note.primary:not(.no-icon)::before{content:'\f055'}.note.primary:not(.no-icon):not(.modern)::before{color:#6f42c1}.note.info.flat{background:#eef7fa}.note.info.modern{border-color:#b3e5ef;background:#d9edf7;color:#31708f}.note.info.modern a:not(.btn){color:#31708f}.note.info.modern a:not(.btn):hover{color:#215761}.note.info:not(.modern){border-left-color:#428bca}.note.info:not(.modern) h2,.note.info:not(.modern) h3,.note.info:not(.modern) h4,.note.info:not(.modern) h5,.note.info:not(.modern) h6{color:#428bca}.note.info:not(.no-icon)::before{content:'\f05a'}.note.info:not(.no-icon):not(.modern)::before{color:#428bca}.note.success.flat{background:#eff8f0}.note.success.modern{border-color:#d0e6be;background:#dff0d8;color:#3c763d}.note.success.modern a:not(.btn){color:#3c763d}.note.success.modern a:not(.btn):hover{color:#32562c}.note.success:not(.modern){border-left-color:#5cb85c}.note.success:not(.modern) h2,.note.success:not(.modern) h3,.note.success:not(.modern) h4,.note.success:not(.modern) h5,.note.success:not(.modern) h6{color:#5cb85c}.note.success:not(.no-icon)::before{content:'\f058'}.note.success:not(.no-icon):not(.modern)::before{color:#5cb85c}.note.warning.flat{background:#fdf8ea}.note.warning.modern{border-color:#fae4cd;background:#fcf4e3;color:#8a6d3b}.note.warning.modern a:not(.btn){color:#8a6d3b}.note.warning.modern a:not(.btn):hover{color:#714f30}.note.warning:not(.modern){border-left-color:#f0ad4e}.note.warning:not(.modern) h2,.note.warning:not(.modern) h3,.note.warning:not(.modern) h4,.note.warning:not(.modern) h5,.note.warning:not(.modern) h6{color:#f0ad4e}.note.warning:not(.no-icon)::before{content:'\f06a'}.note.warning:not(.no-icon):not(.modern)::before{color:#f0ad4e}.note.danger.flat{background:#fcf1f2}.note.danger.modern{border-color:#ebcdd2;background:#f2dfdf;color:#a94442}.note.danger.modern a:not(.btn){color:#a94442}.note.danger.modern a:not(.btn):hover{color:#84333f}.note.danger:not(.modern){border-left-color:#d9534f}.note.danger:not(.modern) h2,.note.danger:not(.modern) h3,.note.danger:not(.modern) h4,.note.danger:not(.modern) h5,.note.danger:not(.modern) h6{color:#d9534f}.note.danger:not(.no-icon)::before{content:'\f056'}.note.danger:not(.no-icon):not(.modern)::before{color:#d9534f}#article-container .tabs{position:relative;margin:0 0 20px;border-right:1px solid var(--tab-border-color);border-bottom:1px solid var(--tab-border-color);border-left:1px solid var(--tab-border-color)}#article-container .tabs>.nav-tabs{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-lines:multiple;-moz-box-lines:multiple;-o-box-lines:multiple;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;background:var(--tab-botton-bg)}#article-container .tabs>.nav-tabs>.tab{margin:0;padding:0;list-style:none}@media screen and (max-width:768px){#article-container .tabs>.nav-tabs>.tab{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;-ms-box-flex:1;box-flex:1;-webkit-flex-grow:1;flex-grow:1}}#article-container .tabs>.nav-tabs>.tab button{display:block;padding:8px 18px;width:100%;border-top:2px solid var(--tab-border-color);background:var(--tab-botton-bg);color:var(--tab-botton-color);line-height:2;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;-ms-transition:all .4s;transition:all .4s}#article-container .tabs>.nav-tabs>.tab button i{width:1.5em}#article-container .tabs>.nav-tabs>.tab.active button{border-top:2px solid #49b1f5;background:var(--tab-button-active-bg);cursor:default}#article-container .tabs>.nav-tabs>.tab:not(.active) button:hover{border-top:2px solid var(--tab-button-hover-bg);background:var(--tab-button-hover-bg)}#article-container .tabs>.tab-contents .tab-item-content{position:relative;display:none;padding:36px 24px}@media screen and (max-width:768px){#article-container .tabs>.tab-contents .tab-item-content{padding:24px 14px}}#article-container .tabs>.tab-contents .tab-item-content.active{display:block;-webkit-animation:tabshow .5s;-moz-animation:tabshow .5s;-o-animation:tabshow .5s;-ms-animation:tabshow .5s;animation:tabshow .5s}#article-container .tabs .tab-to-top{position:relative;display:block;margin:0 0 0 auto;color:#99a9bf}@-moz-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}#article-container .timeline{margin:0 0 20px 10px;padding:14px 20px 5px;border-left:2px solid var(--timeline-color,#49b1f5)}#article-container .timeline.blue{--timeline-color:#428bca;--timeline-bg:rgba(66,139,202, 0.2)}#article-container .timeline.pink{--timeline-color:#ff69b4;--timeline-bg:rgba(255,105,180, 0.2)}#article-container .timeline.red{--timeline-color:#f00;--timeline-bg:rgba(255,0,0, 0.2)}#article-container .timeline.purple{--timeline-color:#6f42c1;--timeline-bg:rgba(111,66,193, 0.2)}#article-container .timeline.orange{--timeline-color:#ff8c00;--timeline-bg:rgba(255,140,0, 0.2)}#article-container .timeline.green{--timeline-color:#5cb85c;--timeline-bg:rgba(92,184,92, 0.2)}#article-container .timeline .timeline-item{margin:0 0 15px}#article-container .timeline .timeline-item:hover .item-circle:before{border-color:var(--timeline-color,#49b1f5)}#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle>p{font-weight:600;font-size:1.2em}#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before{left:-28px;border:4px solid var(--timeline-color,#49b1f5)}#article-container .timeline .timeline-item.headline:hover .item-circle:before{border-color:var(--pseudo-hover)}#article-container .timeline .timeline-item .timeline-item-title{position:relative}#article-container .timeline .timeline-item .item-circle:before{position:absolute;top:50%;left:-27px;width:6px;height:6px;border:3px solid var(--pseudo-hover);border-radius:50%;background:var(--card-bg);content:'';-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}#article-container .timeline .timeline-item .item-circle>p{margin:0 0 8px;font-weight:500}#article-container .timeline .timeline-item .timeline-item-content{position:relative;padding:12px 15px;border-radius:12px;background:var(--timeline-bg,#e4f3fd);font-size:.93em}#article-container .timeline .timeline-item .timeline-item-content>:last-child{margin-bottom:0}#article-container .timeline+.timeline{margin-top:-20px}[data-theme=dark]{--global-bg:#0d0d0d;--font-color:rgba(255,255,255,0.7);--hr-border:rgba(255,255,255,0.4);--hr-before-color:rgba(255,255,255,0.7);--search-bg:#121212;--search-input-color:rgba(255,255,255,0.7);--search-result-title:rgba(255,255,255,0.9);--preloader-bg:#0d0d0d;--preloader-color:rgba(255,255,255,0.7);--tab-border-color:#2c2c2c;--tab-botton-bg:#2c2c2c;--tab-botton-color:rgba(255,255,255,0.7);--tab-button-hover-bg:#383838;--tab-button-active-bg:#121212;--card-bg:#121212;--sidebar-bg:#121212;--btn-hover-color:#787878;--btn-color:rgba(255,255,255,0.7);--btn-bg:#1f1f1f;--text-bg-hover:#383838;--light-grey:rgba(255,255,255,0.7);--dark-grey:rgba(255,255,255,0.2);--white:rgba(255,255,255,0.9);--text-highlight-color:rgba(255,255,255,0.9);--blockquote-color:rgba(255,255,255,0.7);--blockquote-bg:#2c2c2c;--reward-pop:#2c2c2c;--toc-link-color:rgba(255,255,255,0.6);--hl-color:rgba(255,255,255,0.7);--hl-bg:#171717;--hltools-bg:#1a1a1a;--hltools-color:#90a4ae;--hlnumber-bg:#171717;--hlnumber-color:rgba(255,255,255,0.4);--hlscrollbar-bg:#1f1f1f;--hlexpand-bg:linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9));--scrollbar-color:#1f1f1f;--timeline-bg:#1f1f1f}[data-theme=dark] #post{background-color:#0d0d0d}[data-theme=dark] #article-container code{background:#2c2c2c}[data-theme=dark] #article-container pre>code{background:#171717}[data-theme=dark] #article-container figure.highlight{-webkit-box-shadow:none;box-shadow:none}[data-theme=dark] #article-container .note code{background:rgba(27,31,35,.05)}[data-theme=dark] #article-container .aplayer{filter:brightness(.8)}[data-theme=dark] #article-container kbd{border-color:#696969;background-color:#525252;color:#e2f1ff}[data-theme=dark] #page-header.nav-fixed>#nav,[data-theme=dark] #page-header.not-top-img>#nav{background:rgba(18,18,18,.8);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,0);box-shadow:0 5px 6px -5px rgba(133,133,133,0)}[data-theme=dark] .note{filter:brightness(.8)}[data-theme=dark] #article-container iframe,[data-theme=dark] .ads-wrap,[data-theme=dark] .btn-beautify,[data-theme=dark] .error-img,[data-theme=dark] .gist,[data-theme=dark] .hide-button,[data-theme=dark] .hl-label,[data-theme=dark] .post-outdate-notice{filter:brightness(.8)}[data-theme=dark] img{filter:brightness(.8)}[data-theme=dark] #aside-content .aside-list>.aside-list-item:not(:last-child){border-bottom:1px dashed rgba(255,255,255,.1)}[data-theme=dark] #gitalk-container{filter:brightness(.8)}[data-theme=dark] #gitalk-container svg{fill:rgba(255,255,255,.9)!important}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-no-comment,[data-theme=dark] #disqus_thread #dsqjs .dsqjs-tab-active{color:rgba(255,255,255,.7)}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-order-label{background-color:#1f1f1f}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body{color:rgba(255,255,255,.7)}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body code,[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body pre{background:#2c2c2c}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body blockquote{color:rgba(255,255,255,.7)}[data-theme=dark] #artitalk_main #lazy{background:#121212}[data-theme=dark] #operare_artitalk .c2{background:#121212}@media screen and (max-width:900px){[data-theme=dark] #card-toc{background:#1f1f1f}[data-theme=dark] #card-toc .card-widget:not(#card-toc){display:none}}.read-mode{--font-color:#4c4948;--readmode-light-color:#fff;--white:#4c4948;--light-grey:#4c4948;--gray:#d6dbdf;--hr-border:#d6dbdf;--hr-before-color:#b9c2c9;--highlight-bg:#f7f7f7;--exit-btn-bg:#c0c0c0;--exit-btn-color:#fff;--exit-btn-hover:#8d8d8d;--pseudo-hover:none}[data-theme=dark] .read-mode{--font-color:rgba(255,255,255,0.7);--readmode-light-color:#0d0d0d;--white:rgba(255,255,255,0.9);--light-grey:rgba(255,255,255,0.7);--gray:rgba(255,255,255,0.7);--hr-border:rgba(255,255,255,0.5);--hr-before-color:rgba(255,255,255,0.7);--highlight-bg:#171717;--exit-btn-bg:#1f1f1f;--exit-btn-color:rgba(255,255,255,0.9);--exit-btn-hover:#525252}.read-mode{background:var(--readmode-light-color)}.read-mode .exit-readmode{position:fixed;top:30px;right:30px;z-index:100;width:40px;height:40px;border-radius:12px;background:var(--exit-btn-bg);color:var(--exit-btn-color);font-size:16px;-webkit-transition:background .3s;-moz-transition:background .3s;-o-transition:background .3s;-ms-transition:background .3s;transition:background .3s}@media screen and (max-width:768px){.read-mode .exit-readmode{top:initial;bottom:30px}}.read-mode .exit-readmode:hover{background:var(--exit-btn-hover)}.read-mode #aside-content{display:none}.read-mode #page-header.post-bg{background-color:transparent;background-image:none!important}.read-mode #page-header.post-bg:before{opacity:0}.read-mode #page-header.post-bg>#post-info{text-align:center}.read-mode #post{margin:0 auto;background:0 0;-webkit-box-shadow:none;box-shadow:none}.read-mode #post:hover{-webkit-box-shadow:none;box-shadow:none}.read-mode>canvas{display:none!important}.read-mode #footer,.read-mode #nav,.read-mode #post>:not(#post-info):not(.post-content),.read-mode #rightside,.read-mode #web_bg,.read-mode .highlight-tools,.read-mode .not-top-img,.read-mode .post-outdate-notice{display:none!important}.read-mode #article-container a{color:#99a9bf}.read-mode #article-container .highlight:not(.js-file-line-container),.read-mode #article-container pre{background:var(--highlight-bg)!important}.read-mode #article-container .highlight:not(.js-file-line-container) *,.read-mode #article-container pre *{color:var(--font-color)!important}.read-mode #article-container figure.highlight{border-radius:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.read-mode #article-container figure.highlight>:not(.highlight-tools){display:block!important}.read-mode #article-container figure.highlight .line:before{color:var(--font-color)!important}.read-mode #article-container figure.highlight .hljs{background:var(-highlight-bg)!important}.read-mode #article-container h1,.read-mode #article-container h2,.read-mode #article-container h3,.read-mode #article-container h4,.read-mode #article-container h5,.read-mode #article-container h6{padding:0}.read-mode #article-container h1:before,.read-mode #article-container h2:before,.read-mode #article-container h3:before,.read-mode #article-container h4:before,.read-mode #article-container h5:before,.read-mode #article-container h6:before{content:''}.read-mode #article-container h1:hover,.read-mode #article-container h2:hover,.read-mode #article-container h3:hover,.read-mode #article-container h4:hover,.read-mode #article-container h5:hover,.read-mode #article-container h6:hover{padding:0}.read-mode #article-container li:hover:before,.read-mode #article-container ol:hover:before,.read-mode #article-container ul:hover:before{-webkit-transform:none!important;-moz-transform:none!important;-o-transform:none!important;-ms-transform:none!important;transform:none!important}.read-mode #article-container li:before,.read-mode #article-container ol:before{background:0 0!important;color:var(--font-color)!important}.read-mode #article-container ul>li:before{border-color:var(--gray)!important}.read-mode #article-container .tabs{border:2px solid var(--tab-border-color)}.read-mode #article-container .tabs>.nav-tabs{background:0 0}.read-mode #article-container .tabs>.nav-tabs>.tab{border-bottom:0}.read-mode #article-container .tabs>.nav-tabs>.tab button{border-top:none!important;background:0 0}.read-mode #article-container .tabs>.nav-tabs>.tab button:hover{background:0 0!important}.read-mode #article-container .tabs>.nav-tabs>.tab.active button{text-decoration:underline}.read-mode #article-container .tabs>.tab-contents .tab-item-content.active{-webkit-animation:none;-moz-animation:none;-o-animation:none;-ms-animation:none;animation:none}.read-mode #article-container code{color:var(--font-color)}.read-mode #article-container blockquote{border-color:var(--gray);background-color:var(--readmode-light-color)}.read-mode #article-container kbd{border:1px solid var(--gray);background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:var(--font-color)}.read-mode #article-container .hide-toggle{border:1px solid var(--gray)!important}.read-mode #article-container .btn-beautify,.read-mode #article-container .hide-button,.read-mode #article-container .hl-label{border:1px solid var(--gray)!important;background:var(--readmode-light-color)!important;color:var(--font-color)!important}.read-mode #article-container .note{border:2px solid var(--gray);border-left-color:var(--gray)!important;filter:none;background-color:var(--readmode-light-color)!important;color:var(--font-color)}.read-mode #article-container .note .note-icon,.read-mode #article-container .note:before{color:var(--font-color)}.search-dialog{position:fixed;top:10%;left:50%;z-index:1001;display:none;margin-left:-300px;padding:20px;width:600px;border-radius:12px;background:var(--search-bg)}@media screen and (max-width:768px){.search-dialog{top:0;left:0;margin:0;width:100%;height:100%;border-radius:0}}.search-dialog hr{margin:20px auto}.search-dialog .search-nav{margin:0 0 14px;color:#49b1f5;font-size:1.4em;line-height:1}.search-dialog .search-nav .search-dialog-title{margin-right:10px}.search-dialog .search-nav .search-close-button{float:right;color:#858585;-webkit-transition:color .2s ease-in-out;-moz-transition:color .2s ease-in-out;-o-transition:color .2s ease-in-out;-ms-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.search-dialog .search-nav .search-close-button:hover{color:#49b1f5}#search-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:none;background:rgba(0,0,0,.6)}#local-search .search-dialog .local-search-box{margin:0 auto;max-width:100%;width:100%}#local-search .search-dialog .local-search-box input{padding:5px 14px;width:100%;outline:0;border:2px solid #49b1f5;border-radius:40px;background:var(--search-bg);color:var(--search-input-color);-webkit-appearance:none}#local-search .search-dialog .search-wrap{display:none}#local-search .search-dialog .local-search__hit-item{position:relative;padding-left:24px;line-height:1.7}#local-search .search-dialog .local-search__hit-item:hover:before{border-color:var(--pseudo-hover)}#local-search .search-dialog .local-search__hit-item:before{position:absolute;top:.45em;left:0;width:.5em;height:.5em;border:3px solid #49b1f5;border-radius:.5em;background:0 0;content:'';line-height:.5em;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#local-search .search-dialog .local-search__hit-item a{display:block;color:var(--search-result-title);font-weight:600;cursor:pointer}#local-search .search-dialog .local-search__hit-item a:hover{color:#49b1f5}#local-search .search-dialog .local-search__hit-item .search-result{margin:0 8px 8px 0;word-break:break-all}#local-search .search-dialog .local-search__hit-item .search-keyword{color:#f47466;font-weight:700}#local-search .search-dialog .search-result-list{overflow-y:auto;max-height:calc(80vh - 130px)}@media screen and (max-width:768px){#local-search .search-dialog .search-result-list{padding-bottom:40px;max-height:75vh!important}} \ No newline at end of file +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{padding:0;margin:0;width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden;overflow-y:auto}@media screen and (max-width:765px){body,html{line-height:1.15;-webkit-text-size-adjust:100%;padding:0;margin:0;width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden;overflow-y:auto}}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}#article-container .flink .flink-item-desc,#article-container .flink .flink-item-name,#aside-content .card-archives ul.card-archive-list>.card-archive-list-item a span,#aside-content .card-categories ul.card-category-list>.card-category-list-item a span,#pagination .next_info,#pagination .prev_info,#sidebar #sidebar-menus .menus_items .site-page,.limit-one-line,.site-data>a .headline{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}#article-container figure.gallery-group .gallery-group-name,#article-container figure.gallery-group p,#aside-content .aside-list>.aside-list-item .content>.comment,#aside-content .aside-list>.aside-list-item .content>.name,#aside-content .aside-list>.aside-list-item .content>.title,#post-info .post-title,#recent-posts>.recent-post-item>.recent-post-info>.article-title,#recent-posts>.recent-post-item>.recent-post-info>.content,.article-sort-item-title,.limit-more-line,.relatedPosts>.relatedPosts-list .content .title{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}#article-container.post-content h1:before,#article-container.post-content h2:before,#article-container.post-content h3:before,#article-container.post-content h4:before,#article-container.post-content h5:before,#article-container.post-content h6:before,#post .post-outdate-notice:before,.fontawesomeIcon,.note:not(.no-icon)::before,span.categoryBar-list-count::before{display:inline-block;font-weight:600;font-family:'Font Awesome 6 Free';text-rendering:auto;-webkit-font-smoothing:antialiased}#aside-content .card-widget,#recent-posts>.recent-post-item,.cardHover,.layout>.recent-posts .pagination>:not(.space),.layout>div:first-child:not(.recent-posts){border-radius:12px;background:var(--card-bg);-webkit-box-shadow:var(--card-box-shadow);box-shadow:var(--card-box-shadow);-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#aside-content .card-widget:hover,#recent-posts>.recent-post-item:hover,.cardHover:hover,.layout>.recent-posts .pagination>:not(.space):hover,.layout>div:first-child:not(.recent-posts):hover{-webkit-box-shadow:var(--card-hover-box-shadow);box-shadow:var(--card-hover-box-shadow)}#aside-content .aside-list>.aside-list-item .thumbnail>img,#recent-posts>.recent-post-item .post_cover img.post_bg,.article-sort-item-img img,.imgHover{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .6s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .6s;-o-transition:filter 375ms ease-in .2s,-o-transform .6s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .6s;transition:filter 375ms ease-in .2s,transform .6s;object-fit:cover}#aside-content .aside-list>.aside-list-item .thumbnail>img:hover,#recent-posts>.recent-post-item .post_cover img.post_bg:hover,.article-sort-item-img img:hover,.imgHover:hover{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#pagination .next-post:hover img,#pagination .prev-post:hover img,.postImgHover:hover img,.relatedPosts>.relatedPosts-list>div:hover img{opacity:.8;-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#pagination .next-post img,#pagination .prev-post img,.postImgHover img,.relatedPosts>.relatedPosts-list>div img{position:absolute;width:100%;height:100%;opacity:.4;-webkit-transition:all .6s,filter 375ms ease-in .2s;-moz-transition:all .6s,filter 375ms ease-in .2s;-o-transition:all .6s,filter 375ms ease-in .2s;-ms-transition:all .6s,filter 375ms ease-in .2s;transition:all .6s,filter 375ms ease-in .2s;object-fit:cover}.category-lists ul,.list-beauty{list-style:none}.category-lists ul li,.list-beauty li{position:relative;padding:.12em .4em .12em 1.4em}.category-lists ul li:hover:before,.list-beauty li:hover:before{border-color:var(--pseudo-hover)}.category-lists ul li:before,.list-beauty li:before{position:absolute;top:.67em;left:0;width:.43em;height:.43em;border:.215em solid #49b1f5;border-radius:.43em;background:0 0;content:'';cursor:pointer;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}#content-inner,#footer{-webkit-animation:bottom-top 1s;-moz-animation:bottom-top 1s;-o-animation:bottom-top 1s;-ms-animation:bottom-top 1s;animation:bottom-top 1s}#page-header{-webkit-animation:header-effect 1s;-moz-animation:header-effect 1s;-o-animation:header-effect 1s;-ms-animation:header-effect 1s;animation:header-effect 1s}#site-subtitle,#site-title{-webkit-animation:titleScale 1s;-moz-animation:titleScale 1s;-o-animation:titleScale 1s;-ms-animation:titleScale 1s;animation:titleScale 1s}#nav.show{-webkit-animation:headerNoOpacity 1s;-moz-animation:headerNoOpacity 1s;-o-animation:headerNoOpacity 1s;-ms-animation:headerNoOpacity 1s;animation:headerNoOpacity 1s}#web_bg,canvas:not(#ribbon-canvas){-webkit-animation:to_show 4s;-moz-animation:to_show 4s;-o-animation:to_show 4s;-ms-animation:to_show 4s;animation:to_show 4s}#ribbon-canvas{-webkit-animation:ribbon_to_show 4s;-moz-animation:ribbon_to_show 4s;-o-animation:ribbon_to_show 4s;-ms-animation:ribbon_to_show 4s;animation:ribbon_to_show 4s}#sidebar-menus.open>:nth-child(1){-webkit-animation:sidebarItem .2s;-moz-animation:sidebarItem .2s;-o-animation:sidebarItem .2s;-ms-animation:sidebarItem .2s;animation:sidebarItem .2s}#sidebar-menus.open>:nth-child(2){-webkit-animation:sidebarItem .4s;-moz-animation:sidebarItem .4s;-o-animation:sidebarItem .4s;-ms-animation:sidebarItem .4s;animation:sidebarItem .4s}#sidebar-menus.open>:nth-child(3){-webkit-animation:sidebarItem .6s;-moz-animation:sidebarItem .6s;-o-animation:sidebarItem .6s;-ms-animation:sidebarItem .6s;animation:sidebarItem .6s}#sidebar-menus.open>:nth-child(4){-webkit-animation:sidebarItem .8s;-moz-animation:sidebarItem .8s;-o-animation:sidebarItem .8s;-ms-animation:sidebarItem .8s;animation:sidebarItem .8s}.scroll-down-effects{-webkit-animation:scroll-down-effect 1.5s infinite;-moz-animation:scroll-down-effect 1.5s infinite;-o-animation:scroll-down-effect 1.5s infinite;-ms-animation:scroll-down-effect 1.5s infinite;animation:scroll-down-effect 1.5s infinite}.reward-main{-webkit-animation:donate_effcet .3s .1s ease both;-moz-animation:donate_effcet .3s .1s ease both;-o-animation:donate_effcet .3s .1s ease both;-ms-animation:donate_effcet .3s .1s ease both;animation:donate_effcet .3s .1s ease both}@-moz-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-webkit-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-o-keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@keyframes scroll-down-effect{0%{top:0;opacity:.4}50%{top:-16px;opacity:1;-ms-filter:none;filter:none}100%{top:0;opacity:.4}}@-moz-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes header-effect{0%{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes headerNoOpacity{0%{-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-o-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-webkit-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-o-keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@keyframes bottom-top{0%{margin-top:50px;opacity:0}100%{margin-top:0;opacity:1;-ms-filter:none;filter:none}}@-moz-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-webkit-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-o-keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@keyframes titleScale{0%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-moz-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-webkit-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-o-keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@keyframes search_close{0%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-moz-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-webkit-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-o-keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@keyframes to_show{0%{opacity:0}100%{opacity:1;-ms-filter:none;filter:none}}@-moz-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-webkit-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-o-keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@keyframes to_hide{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:0}}@-moz-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-webkit-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-o-keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@keyframes ribbon_to_show{0%{opacity:0}100%{opacity:.6}}@-moz-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes sub_menus{0%{opacity:0;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-o-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes donate_effcet{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-o-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@-o-keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}@keyframes sidebarItem{0%{-webkit-transform:translateX(200px);-moz-transform:translateX(200px);-o-transform:translateX(200px);-ms-transform:translateX(200px);transform:translateX(200px)}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}:root{--global-font-size:16px;--global-bg:#fff;--font-color:#4c4948;--hr-border:#a4d8fa;--hr-before-color:#80c8f8;--search-bg:#f6f8fa;--search-input-color:#4c4948;--search-result-title:#4c4948;--preloader-bg:#37474f;--preloader-color:#fff;--tab-border-color:#f0f0f0;--tab-botton-bg:#f0f0f0;--tab-botton-color:#1f2d3d;--tab-button-hover-bg:#dcdcdc;--tab-button-active-bg:#fff;--card-bg:#fff;--sidebar-bg:#f6f8fa;--btn-hover-color:#ff7242;--btn-color:#fff;--btn-bg:#49b1f5;--text-bg-hover:rgba(73,177,245,0.7);--light-grey:#eee;--dark-grey:#cacaca;--white:#fff;--text-highlight-color:#1f2d3d;--blockquote-color:#6a737d;--blockquote-bg:rgba(73,177,245,0.1);--reward-pop:#f5f5f5;--toc-link-color:#666261;--card-box-shadow:0 3px 8px 6px rgba(7,17,27,0.05);--card-hover-box-shadow:0 3px 8px 6px rgba(7,17,27,0.09);--pseudo-hover:#ff7242;--headline-presudo:#a0a0a0;--scrollbar-color:#49b1f5}body{position:relative;min-height:100%;background:var(--global-bg);color:var(--font-color);font-size:var(--global-font-size);font-family:-apple-system,IBM Plex Mono,monosapce,"微软雅黑",sans-serif;line-height:2;-webkit-tap-highlight-color:transparent}*{scrollbar-width:thin;scrollbar-color:#ff7242 transparent}input::placeholder{color:var(--font-color)}h1,h2,h3,h4,h5,h6{position:relative;margin:20px 0 14px;color:var(--text-highlight-color);font-weight:700}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:inherit!important}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.table-wrap{overflow-x:scroll;margin:0 0 20px}table{display:table;width:100%;border-spacing:0;border-collapse:collapse;empty-cells:show}table thead{background:rgba(153,169,191,.1)}table td,table th{padding:6px 12px;border:1px solid var(--light-grey);vertical-align:middle}::selection{background:#00c4b6;color:#f7f7f7}button{padding:0;outline:0;border:none;background:0 0;cursor:pointer;touch-action:manipulation}.is-center{text-align:center}.copy-true{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.pull-left{float:left}.pull-right{float:right}img:not([src]),img[src='']{opacity:0}.img-alt{margin:-10px 0 10px;color:#858585}.img-alt:hover{text-decoration:none!important}blockquote{margin:0 0 20px;padding:12px 15px;border-left:3px solid #49b1f5;background-color:var(--blockquote-bg);color:var(--blockquote-color)}blockquote footer cite:before{padding:0 5px;content:'—'}blockquote>:last-child{margin-bottom:0!important}:root{--hl-color:#90a4ae;--hl-bg:#f6f8fa;--hltools-bg:#e6ebf1;--hltools-color:#90a4ae;--hlnumber-bg:#f6f8fa;--hlnumber-color:rgba(144,164,174,0.5);--hlscrollbar-bg:#dce4eb;--hlexpand-bg:linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9))}figure.highlight table{scrollbar-color:var(--hlscrollbar-bg) transparent}figure.highlight pre .deletion{color:#bf42bf}figure.highlight pre .addition{color:#105ede}figure.highlight pre .meta{color:#7c4dff}figure.highlight pre .comment{color:rgba(149,165,166,.8)}figure.highlight pre .attribute,figure.highlight pre .css .class,figure.highlight pre .css .id,figure.highlight pre .css .pseudo,figure.highlight pre .html .doctype,figure.highlight pre .regexp,figure.highlight pre .ruby .constant,figure.highlight pre .tag .name,figure.highlight pre .variable,figure.highlight pre .xml .doctype,figure.highlight pre .xml .pi,figure.highlight pre .xml .tag .title{color:#e53935}figure.highlight pre .tag{color:#39adb5}figure.highlight pre .command,figure.highlight pre .constant,figure.highlight pre .literal,figure.highlight pre .number,figure.highlight pre .params,figure.highlight pre .preprocessor{color:#f76d47}figure.highlight pre .built_in{color:#ffb62c}figure.highlight pre .css .rules .attribute,figure.highlight pre .formula,figure.highlight pre .header,figure.highlight pre .inheritance,figure.highlight pre .number,figure.highlight pre .ruby .class .title,figure.highlight pre .ruby .symbol,figure.highlight pre .special,figure.highlight pre .string,figure.highlight pre .value,figure.highlight pre .xml .cdata{color:#91b859}figure.highlight pre .css .hexcolor,figure.highlight pre .keyword,figure.highlight pre .title{color:#39adb5}figure.highlight pre .coffeescript .title,figure.highlight pre .function,figure.highlight pre .javascript .title,figure.highlight pre .perl .sub,figure.highlight pre .python .decorator,figure.highlight pre .python .title,figure.highlight pre .ruby .function .title,figure.highlight pre .ruby .title .keyword{color:#6182b8}figure.highlight pre .javascript .function,figure.highlight pre .tag .attr{color:#7c4dff}#article-container figure.highlight .line.marked{background-color:rgba(128,203,196,.251)}#article-container figure.highlight table{display:block;overflow:auto;border:none}#article-container figure.highlight table td{padding:0;border:none}#article-container figure.highlight .gutter pre{padding-right:10px;padding-left:10px;background-color:var(--hlnumber-bg);color:var(--hlnumber-color);text-align:right}#article-container figure.highlight .code pre{padding-right:10px;padding-left:10px;width:100%}#article-container figure.highlight,#article-container pre{overflow:auto;margin:0 0 20px;padding:0;background:var(--hl-bg);color:var(--hl-color);line-height:1.6}#article-container code,#article-container pre{font-size:var(--global-font-size)}#article-container code{padding:2px 4px;background:rgba(27,31,35,.05);color:#f47466}#article-container pre{padding:10px 20px}#article-container pre code{padding:0;background:0 0;color:var(--hl-color);text-shadow:none}#article-container figure.highlight{position:relative}#article-container figure.highlight pre{margin:0;padding:8px 0;border:none}#article-container figure.highlight .caption,#article-container figure.highlight figcaption{padding:6px 0 2px 14px;font-size:var(--global-font-size);line-height:1em}#article-container figure.highlight .caption a,#article-container figure.highlight figcaption a{float:right;padding-right:10px;color:var(--hl-color)}#article-container figure.highlight .caption a:hover,#article-container figure.highlight figcaption a:hover{border-bottom-color:var(--hl-color)}#article-container .highlight-tools{position:relative;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;overflow:hidden;min-height:24px;height:2.15em;background:var(--hltools-bg);color:var(--hltools-color);font-size:var(--global-font-size)}#article-container .highlight-tools.closed~*{display:none}#article-container .highlight-tools .expand{position:absolute;padding:.57em .7em;cursor:pointer;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#article-container .highlight-tools .expand+.code-lang{left:1.7em}#article-container .highlight-tools .expand.closed{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:rotate(-90deg)!important;-moz-transform:rotate(-90deg)!important;-o-transform:rotate(-90deg)!important;-ms-transform:rotate(-90deg)!important;transform:rotate(-90deg)!important}#article-container .highlight-tools .code-lang{position:absolute;left:14px;text-transform:uppercase;font-weight:700;font-size:1.15em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#article-container .highlight-tools .copy-notice{position:absolute;right:2.4em;opacity:0;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s;transition:opacity .4s}#article-container .highlight-tools .copy-button{position:absolute;right:14px;cursor:pointer;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}#article-container .highlight-tools .copy-button:hover{color:#49b1f5}#article-container .gutter{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#article-container .gist table{width:auto}#article-container .gist table td{border:none}#article-container figure.highlight{margin:0 0 24px;border-radius:7px;-webkit-box-shadow:0 5px 10px 0 rgba(144,164,174,.4);box-shadow:0 5px 10px 0 rgba(144,164,174,.4);-webkit-transform:translateZ(0)}#article-container figure.highlight .highlight-tools:after{position:absolute;left:14px;width:12px;height:12px;border-radius:50%;background:#fc625d;-webkit-box-shadow:20px 0 #fdbc40,40px 0 #35cd4b;box-shadow:20px 0 #fdbc40,40px 0 #35cd4b;content:' '}#article-container figure.highlight .highlight-tools .expand{right:0}#article-container figure.highlight .highlight-tools .expand.closed{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:rotate(90deg)!important;-moz-transform:rotate(90deg)!important;-o-transform:rotate(90deg)!important;-ms-transform:rotate(90deg)!important;transform:rotate(90deg)!important}#article-container figure.highlight .highlight-tools .expand~.copy-notice{right:3.45em}#article-container figure.highlight .highlight-tools .expand~.copy-button{right:2.1em}#article-container figure.highlight .highlight-tools .code-lang{left:75px}#article-container .code-expand-btn{position:absolute;bottom:0;z-index:10;width:100%;background:var(--hlexpand-bg);text-align:center;font-size:var(--global-font-size);cursor:pointer}#article-container .code-expand-btn i{padding:6px 0;color:var(--hlnumber-color);-webkit-animation:code-expand-key 1.2s infinite;-moz-animation:code-expand-key 1.2s infinite;-o-animation:code-expand-key 1.2s infinite;-ms-animation:code-expand-key 1.2s infinite;animation:code-expand-key 1.2s infinite}#article-container .code-expand-btn.expand-done>i{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#article-container .code-expand-btn.expand-done+pre,#article-container .code-expand-btn.expand-done+table{margin-bottom:1.8em}#article-container .code-expand-btn:not(.expand-done)~pre,#article-container .code-expand-btn:not(.expand-done)~table{overflow:hidden;height:500px}@-moz-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@-webkit-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@-o-keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}@keyframes code-expand-key{0%{opacity:.6}50%{opacity:.1}100%{opacity:.6}}.article-sort{margin-left:10px;padding-left:20px;border-left:2px solid #aadafa}.article-sort-title{position:relative;margin-left:10px;padding-bottom:20px;padding-left:20px;font-size:1.72em}.article-sort-title:hover:before{border-color:var(--pseudo-hover)}.article-sort-title:before{position:absolute;top:calc(((100% - 36px)/ 2));left:-9px;z-index:1;width:10px;height:10px;border:5px solid #49b1f5;border-radius:10px;background:var(--card-bg);content:'';line-height:10px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-title:after{position:absolute;bottom:0;left:0;z-index:0;width:2px;height:1.5em;background:#aadafa;content:''}.article-sort-item{position:relative;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;margin:0 0 20px 10px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-item:hover:before{border-color:var(--pseudo-hover)}.article-sort-item:before{position:absolute;left:calc(-20px - 17px);width:6px;height:6px;border:3px solid #49b1f5;border-radius:6px;background:var(--card-bg);content:'';-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.article-sort-item.no-article-cover{height:80px}.article-sort-item.no-article-cover .article-sort-item-info{padding:0}.article-sort-item.year{font-size:1.43em}.article-sort-item.year:hover:before{border-color:#49b1f5}.article-sort-item.year:before{border-color:var(--pseudo-hover)}.article-sort-item-time{color:#858585;font-size:95%}.article-sort-item-time time{padding-left:6px;cursor:default}.article-sort-item-title{color:var(--font-color);font-size:1.1em;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-line-clamp:2}.article-sort-item-title:hover{color:#49b1f5;-webkit-transform:translateX(10px);-moz-transform:translateX(10px);-o-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}.article-sort-item-img{overflow:hidden;width:80px;height:80px}.article-sort-item-info{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 16px}.category-lists .category-title{font-size:2.57em}@media screen and (max-width:768px){.category-lists .category-title{font-size:2em}}.category-lists .category-list{margin-bottom:0}.category-lists .category-list a{color:var(--font-color)}.category-lists .category-list a:hover{color:#49b1f5}.category-lists .category-list .category-list-count{margin-left:8px;color:#858585}.category-lists .category-list .category-list-count:before{content:'('}.category-lists .category-list .category-list-count:after{content:')'}.category-lists ul{padding:0 0 0 20px}.category-lists ul ul{padding-left:4px}.category-lists ul li{position:relative;margin:6px 0;padding:.12em .4em .12em 1.4em}#body-wrap{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:100vh}@media screen and (max-width:900px){.layout{-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.layout .card-widget:not(#card-toc){display:none}}@media screen and (min-width:2000px){.layout{max-width:1500px}}.layout>div:first-child:not(.recent-posts){-webkit-align-self:flex-start;align-self:flex-start;-ms-flex-item-align:start;padding:50px 40px}@media screen and (max-width:768px){.layout>div:first-child:not(.recent-posts){padding:36px 14px}}.layout>div:first-child{width:74%;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}@media screen and (max-width:900px){.layout>div:first-child{width:100%!important}.layout>div:first-child .card-widget:not(#card-toc){display:none}}@media screen and (min-width:900px){.layout>div:first-child{-webkit-box-ordinal-group:2;-moz-box-ordinal-group:2;-o-box-ordinal-group:2;-ms-flex-order:2;-webkit-order:2;order:2}}@media screen and (min-width:2000px){.layout.hide-aside{max-width:1300px}}.layout.hide-aside>div{width:100%!important}.apple #page-header.full_page{background-attachment:scroll!important}.apple .avatar-img,.apple .flink-item-icon,.apple .recent-post-item{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}#article-container .flink{margin-bottom:20px}#article-container .flink .flink-list{overflow:auto;padding:10px 10px 0;text-align:center}#article-container .flink .flink-list>.flink-list-item{position:relative;float:left;overflow:hidden;margin:15px 7px;width:calc(100% / 3 - 15px);height:90px;border-radius:12px;line-height:17px;-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-transform:translateZ(0)}@media screen and (max-width:1024px){#article-container .flink .flink-list>.flink-list-item{width:calc(50% - 15px)!important}}@media screen and (max-width:600px){#article-container .flink .flink-list>.flink-list-item{width:calc(100% - 15px)!important}}#article-container .flink .flink-list>.flink-list-item:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;content:'';-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-transform:scale(0);-moz-transform:scale(0);-o-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}#article-container .flink .flink-list>.flink-list-item:active:before,#article-container .flink .flink-list>.flink-list-item:focus:before,#article-container .flink .flink-list>.flink-list-item:hover:before{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1);-webkit-transition:background-color .25s linear;-moz-transition:background-color .25s linear;-o-transition:background-color .25s linear;-ms-transition:background-color .25s linear;transition:background-color .25s linear}#article-container .flink .flink-list>.flink-list-item a{color:var(--font-color);text-decoration:none}#article-container .flink .flink-list>.flink-list-item a .flink-item-icon{float:left;overflow:hidden;margin:15px 10px;width:60px;height:60px;border-radius:35px;-webkit-transition:width .3s ease-out;-moz-transition:width .3s ease-out;-o-transition:width .3s ease-out;-ms-transition:width .3s ease-out;transition:width .3s ease-out}#article-container .flink .flink-list>.flink-list-item a .flink-item-icon img{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .3s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .3s;-o-transition:filter 375ms ease-in .2s,-o-transform .3s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .3s;transition:filter 375ms ease-in .2s,transform .3s;object-fit:cover}#article-container .flink .flink-list>.flink-list-item a .img-alt{display:none}#article-container .flink .flink-item-name{padding:16px 10px 0 0;height:40px;font-weight:700;font-size:1.43em}#article-container .flink .flink-item-desc{padding:16px 10px 16px 0;height:50px;font-size:.93em}#article-container .flink .flink-name{margin-bottom:5px;font-weight:700;font-size:1.5em}#recent-posts>.recent-post-item:not(:first-child){margin-top:20px}#recent-posts>.recent-post-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-o-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;overflow:hidden;height:18em}@media screen and (max-width:768px){#recent-posts>.recent-post-item{-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:auto}}#recent-posts>.recent-post-item:hover img.post_bg{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}#recent-posts>.recent-post-item.ads-wrap{display:block!important;height:auto!important}#recent-posts>.recent-post-item .post_cover{overflow:hidden;width:44%;height:100%}@media screen and (max-width:768px){#recent-posts>.recent-post-item .post_cover{width:100%;height:230px}}#recent-posts>.recent-post-item .post_cover.right{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-o-box-ordinal-group:1;-ms-flex-order:1;-webkit-order:1;order:1}@media screen and (max-width:768px){#recent-posts>.recent-post-item .post_cover.right{-webkit-box-ordinal-group:0;-moz-box-ordinal-group:0;-o-box-ordinal-group:0;-ms-flex-order:0;-webkit-order:0;order:0}}#recent-posts>.recent-post-item>.recent-post-info{padding:0 40px;width:57%}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info{padding:20px 20px 30px;width:100%}}#recent-posts>.recent-post-item>.recent-post-info.no-cover{width:100%}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info.no-cover{padding:30px 20px}}#recent-posts>.recent-post-item>.recent-post-info>.article-title{color:var(--text-highlight-color);font-size:1.72em;line-height:1.4;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-line-clamp:2}@media screen and (max-width:768px){#recent-posts>.recent-post-item>.recent-post-info>.article-title{font-size:1.43em}}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap{margin:6px 0;color:#858585;font-size:90%}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap>.post-meta-date{cursor:default}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .sticky{color:#ff7242}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap i{margin:0 4px 0 0}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-label{padding-right:4px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-separator{margin:0 6px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap .article-meta-link{margin:0 4px}#recent-posts>.recent-post-item>.recent-post-info>.article-meta-wrap a{color:#858585}#recent-posts>.recent-post-item>.recent-post-info>.content{-webkit-line-clamp:2}.tag-cloud-list a{display:inline-block;padding:0 8px;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.tag-cloud-list a:hover{color:#49b1f5!important;-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}@media screen and (max-width:768px){.tag-cloud-list a{zoom:.85}}.tag-cloud-title{font-size:2.57em}@media screen and (max-width:768px){.tag-cloud-title{font-size:2em}}h1.page-title+.tag-cloud-list{text-align:left}#aside-content{width:26%}@media screen and (max-width:900px){#aside-content{width:100%}#aside-content .card-widget:not(#card-toc){display:none}}#aside-content>.card-widget:first-child{margin-top:0}@media screen and (max-width:900px){#aside-content>.card-widget:first-child{margin-top:20px}#aside-content>.card-widget:first-child .card-widget:not(#card-toc){display:none}}#aside-content .card-widget{position:relative;overflow:hidden;margin-top:20px;padding:20px 24px}@media screen and (max-width:768px){#aside-content .card-widget:not(#card-toc){display:none}}#aside-content .card-info .author-info__name{font-weight:500;font-size:1.57em}#aside-content .card-info .author-info__description{margin-top:-.42em}#aside-content .card-info .card-info-data{margin:4px 0 4px}#aside-content .card-info .card-info-social-icons{margin:6px 0 -6px}#aside-content .card-info .card-info-social-icons .social-icon{margin:0 10px;color:var(--font-color);font-size:1.4em}#aside-content .card-info .card-info-social-icons i{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#aside-content .card-info .card-info-social-icons i:hover{-webkit-transform:rotate(540deg);-moz-transform:rotate(540deg);-o-transform:rotate(540deg);-ms-transform:rotate(540deg);transform:rotate(540deg)}#aside-content .card-info #card-info-btn{display:block;margin-top:14px;background-color:#f05012;color:var(--btn-color);text-align:center;line-height:2.4}#aside-content .card-info #card-info-btn:hover{background-color:var(--btn-hover-color)}#aside-content .card-info #card-info-btn span{padding-left:10px}#aside-content .item-headline{padding-bottom:6px;font-size:1.2em}#aside-content .item-headline span{margin-left:6px}@media screen and (min-width:900px){#aside-content .sticky_layout{position:sticky;position:-webkit-sticky;top:20px;-webkit-transition:top .3s;-moz-transition:top .3s;-o-transition:top .3s;-ms-transition:top .3s;transition:top .3s}}#aside-content .card-tag-cloud a{display:inline-block;padding:0 4px}#aside-content .aside-list>span{display:block;margin-bottom:10px;text-align:center}#aside-content .aside-list>.aside-list-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:6px 0}#aside-content .aside-list>.aside-list-item:first-child{padding-top:0}#aside-content .aside-list>.aside-list-item:not(:last-child){border-bottom:1px dashed #f5f5f5}#aside-content .aside-list>.aside-list-item:last-child{padding-bottom:0}#aside-content .aside-list>.aside-list-item .thumbnail{overflow:hidden;width:4.2em;height:4.2em}#aside-content .aside-list>.aside-list-item .content{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-left:10px;word-break:break-all}#aside-content .aside-list>.aside-list-item .content>.name{-webkit-line-clamp:1}#aside-content .aside-list>.aside-list-item .content>.name,#aside-content .aside-list>.aside-list-item .content>time{display:block;color:#858585;font-size:85%}#aside-content .aside-list>.aside-list-item .content>.comment,#aside-content .aside-list>.aside-list-item .content>.title{color:var(--font-color);font-size:95%;line-height:1.5;-webkit-line-clamp:2}#aside-content .aside-list>.aside-list-item .content>.comment:hover,#aside-content .aside-list>.aside-list-item .content>.title:hover{color:#49b1f5}#aside-content .aside-list>.aside-list-item.no-cover{min-height:4.4em}#aside-content .card-archives ul.card-archive-list,#aside-content .card-categories ul.card-category-list{margin:0;padding:0;list-style:none}#aside-content .card-archives ul.card-archive-list>.card-archive-list-item a span:first-child,#aside-content .card-categories ul.card-category-list>.card-category-list-item a span:first-child{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}#aside-content .card-categories .card-category-list.child{padding:0 0 0 16px}#aside-content .card-categories .card-category-list>.parent>a .card-category-list-name{width:70%!important}#aside-content .card-categories .card-category-list>.parent>a .card-category-list-count{width:calc(100% - 70% - 20px);text-align:right}#aside-content .card-categories .card-category-list>.parent i{float:right;margin-right:-.5em;padding:.5em;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}#aside-content .card-categories .card-category-list>.parent i.expand{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}#aside-content .card-webinfo .webinfo .webinfo-item{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:2px 10px 0}#aside-content .card-webinfo .webinfo .webinfo-item div:first-child{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-right:20px}@media screen and (min-width:901px){#aside-content #card-toc{right:0!important}}@media screen and (max-width:900px){#aside-content #card-toc{position:fixed;right:-100%;bottom:30px;z-index:100;max-width:380px;max-height:calc(100% - 60px);width:calc(100% - 80px);opacity:0;-webkit-transition:initial;-moz-transition:initial;-o-transition:initial;-ms-transition:initial;transition:initial;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-o-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom}#aside-content #card-toc .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-percentage{float:right;margin-top:-9px;color:#a9a9a9;font-style:italic;font-size:140%}#aside-content #card-toc .toc-content{overflow-y:scroll;overflow-y:overlay;margin:0 -24px;max-height:calc(100vh - 120px)}@media screen and (max-width:900px){#aside-content #card-toc .toc-content{max-height:calc(100vh - 140px)}#aside-content #card-toc .toc-content .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-content>*>.toc-item>.toc-child{margin-left:10px;padding-left:10px;border-left:1px solid var(--dark-grey)}#aside-content #card-toc .toc-content:not(.is-expand) .toc-child{display:none}@media screen and (max-width:900px){#aside-content #card-toc .toc-content:not(.is-expand) .toc-child{display:block!important}#aside-content #card-toc .toc-content:not(.is-expand) .toc-child .card-widget:not(#card-toc){display:none}}#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child{display:block}#aside-content #card-toc .toc-content li,#aside-content #card-toc .toc-content ol{list-style:none}#aside-content #card-toc .toc-content>ol{padding:0!important}#aside-content #card-toc .toc-content ol{margin:0;padding-left:18px}#aside-content #card-toc .toc-content .toc-link{display:block;margin:4px 0;padding:1px 6px;color:var(--toc-link-color);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#aside-content #card-toc .toc-content .toc-link:hover{color:#f05011}#aside-content #card-toc .toc-content .toc-link.active{background:#f05011;color:#fff}#aside-content :only-child>.card-widget{margin-top:0}#aside-content .card-more-btn{float:right;color:inherit}#aside-content .card-more-btn:hover{-webkit-animation:more-btn-move 1s infinite;-moz-animation:more-btn-move 1s infinite;-o-animation:more-btn-move 1s infinite;-ms-animation:more-btn-move 1s infinite;animation:more-btn-move 1s infinite}#aside-content .card-announcement .item-headline i{color:red}.avatar-img{overflow:hidden;margin:0 auto;width:110px;height:110px;border-radius:70px}.avatar-img img{width:100%;height:100%;-webkit-transition:filter 375ms ease-in .2s,-webkit-transform .3s;-moz-transition:filter 375ms ease-in .2s,-moz-transform .3s;-o-transition:filter 375ms ease-in .2s,-o-transform .3s;-ms-transition:filter 375ms ease-in .2s,-ms-transform .3s;transition:filter 375ms ease-in .2s,transform .3s;object-fit:cover}.avatar-img img:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}.site-data{display:table;width:100%;table-layout:fixed}.site-data>a{display:table-cell}.site-data>a div{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.site-data>a:hover div{color:#f05012!important}.site-data>a .headline{color:var(--font-color)}.site-data>a .length-num{margin-top:-.32em;color:var(--text-highlight-color);font-size:1.4em}@media screen and (min-width:900px){html.hide-aside .layout{-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}html.hide-aside .layout>.aside-content{display:none}html.hide-aside .layout>div:first-child{width:80%}}.page .sticky_layout{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-orient:vertical;-moz-box-orient:vertical;-o-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}@-moz-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-webkit-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-o-keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@keyframes more-btn-move{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(3px);-moz-transform:translateX(3px);-o-transform:translateX(3px);-ms-transform:translateX(3px);transform:translateX(3px)}}@-moz-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-webkit-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-o-keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@keyframes toc-open{0%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-moz-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-webkit-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@-o-keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}@keyframes toc-close{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}100%{-webkit-transform:scale(.7);-moz-transform:scale(.7);-o-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}#calendar a{text-decoration:none}.cal-head{position:relative;height:20px;padding:8px 6px 2px 6px;margin-bottom:15px}.cal-next,.cal-prev{position:absolute;top:9px;width:9px;height:10px;padding:3px 4px;border:1px solid transparent;color:#333;outline:0}.cal-prev{left:8px}.cal-prev:before{border-right:9px solid #333}.cal-next{right:8px}.cal-next:before{border-left:9px solid #333}.cal-next:before,.cal-prev:before{content:'';display:block;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent}.cal-title{width:120px;margin:0 auto;color:#333;font:bold 14px/18px Arial;text-align:center}.cal-title a{border:1px solid transparent;color:#f76b61}.cal,.cal td,.cal th{border:none}.cal{border-collapse:collapse;border-spacing:0;table-layout:fixed;width:100%;margin:0}.cal th{background:rgba(0,0,0,0);color:#000;font-weight:900!important}.cal tbody a{background-color:#f76b61;color:#fff;display:block;font-weight:700;border:1px solid #fff}.cal tbody .cal-today{background-color:#ffdfdd;color:#f76b61}.cal .cal-gray{color:#ddd}.cal td,.cal th{font-weight:400;line-height:2.5625;padding:0;text-align:center}.cal .cal-foot:focus,.cal .cal-foot:hover,.cal-next:hover,.cal-prev:hover,.cal-title a:hover{cursor:pointer;background-color:transparent;cursor:pointer;color:#42d3d8}.cal tbody a:focus,.cal tbody a:hover{background-color:#ffdfdd;color:#fff;cursor:pointer}#categoryBar{width:100%!important}ul.categoryBar-list{margin:5px 5px 0 5px!important;padding:0!important}li.categoryBar-list-item{font-weight:700;display:inline-block;height:180px!important;margin:5px .5% 0 .5%!important;background-image:-webkit-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-moz-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-o-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:-ms-linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);background-image:linear-gradient(rgba(0,0,0,.4) 25%,rgba(16,16,16,0) 100%);border-radius:10px;padding:25px 0 25px 25px!important;-webkit-box-shadow:rgba(50,50,50,.3) 50px 50px 50px 50px inset;box-shadow:rgba(50,50,50,.3) 50px 50px 50px 50px inset;overflow:hidden;background-size:100%!important;background-position:center!important}li.categoryBar-list-item:hover{background-size:110%!important;-webkit-box-shadow:inset 500px 50px 50px 50px rgba(50,50,50,.6);box-shadow:inset 500px 50px 50px 50px rgba(50,50,50,.6)}li.categoryBar-list-item:hover span.categoryBar-list-count::after{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-o-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}a.categoryBar-list-link{color:#fff!important;font-size:20px!important}a.categoryBar-list-link::before{content:'|'!important;color:#fff!important;font-size:20px!important}a.categoryBar-list-link:after{content:'';position:relative;width:0;bottom:0;display:block;height:3px;border-radius:3px;background-color:#fff}a.categoryBar-list-link:hover:after{width:90%;left:1%;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}span.categoryBar-list-count{display:block!important;color:#fff!important;font-size:20px!important}span.categoryBar-list-count::before{content:'\f02d'!important;padding-right:15px!important}span.categoryBar-list-count::after{padding:5px;display:block!important;color:#fff!important;font-size:20px!important;position:relative;right:-100%}li.categoryBar-list-item:nth-child(1){background:rgba(255,20,200,.6)}li.categoryBar-list-item:nth-child(2){background:rgba(255,40,40,.6)}li.categoryBar-list-item:nth-child(3){background:rgba(112,235,12,.6)}li.categoryBar-list-item:nth-child(4){background:rgba(235,146,12,.6)}li.categoryBar-list-item:nth-child(5){background:rgba(12,135,235,.6)}li.categoryBar-list-item:nth-child(6){background:#425aef88}li.categoryBar-list-item:nth-child(7){background:#ed709b88}li.categoryBar-list-item:nth-child(8){background:#79b8ff}li.categoryBar-list-item:nth-child(9){background:#6d5493}li.categoryBar-list-item:nth-child(10){background:#ed9090}li.categoryBar-list-item:nth-child(11){background:#d9b44f}li.categoryBar-list-item:nth-child(12){background:#1ea4df}li.categoryBar-list-item:nth-child(1)>span::after{content:'3D打印分享'!important}li.categoryBar-list-item:nth-child(2)>span::after{content:'Hexo魔改教程'!important}li.categoryBar-list-item:nth-child(3)>span::after{content:'自己的杂谈和事情'!important}li.categoryBar-list-item:nth-child(4)>span::after{content:'白嫖党万岁!'!important}li.categoryBar-list-item:nth-child(5)>span::after{content:'一些教程'!important}li.categoryBar-list-item:nth-child(6)>span::after{content:'解决一些bug与避坑'!important}li.categoryBar-list-item{width:32.3%!important}@media screen and (max-width:650px){li.categoryBar-list-item{width:48%!important;height:150px!important;margin:5px 1% 0 1%!important}}.categoryBar-list{max-height:380px;overflow:auto}.categoryBar-list::-webkit-scrollbar{width:0!important}@media screen and (max-width:650px){.categoryBar-list{max-height:320px}}.fixed-card-widget:not(#card-toc){visibility:visible!important;display:block!important;position:fixed!important;bottom:0;left:0;top:0;right:0;margin:auto;margin-bottom:auto!important;margin-top:auto!important;max-width:300px;max-height:500px;width:auto;height:fit-content;z-index:999;-webkit-animation:rotateX .5s ease;-moz-animation:rotateX .5s ease;-o-animation:rotateX .5s ease;-ms-animation:rotateX .5s ease;animation:rotateX .5s ease;-webkit-animation-fill-mode:forwards;-moz-animation-fill-mode:forwards;-o-animation-fill-mode:forwards;-ms-animation-fill-mode:forwards;animation-fill-mode:forwards}.card-shuo.fixed-card-widget #artitalk_main{max-height:460px;overflow:scroll}.card-shuo.fixed-card-widget #artitalk_main::-webkit-scrollbar{display:none}.card-shuo.fixed-card-widget #operare_artitalk .c2{z-index:1000}.card-tags.fixed-card-widget .card-tag-cloud{max-height:460px;overflow:scroll}.card-tags.fixed-card-widget .card-tag-cloud::-webkit-scrollbar{display:none}@media screen and (max-width:900px){div#fixedcard-dashboard{display:-webkit-box!important;display:-moz-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:box!important;display:flex!important}}div#fixedcard-dashboard{position:fixed;top:150px;width:fit-content;height:40px;opacity:.3;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;display:none;background:rgba(255,255,255,.9);padding:5px 10px;border-top-right-radius:20px;border-bottom-right-radius:20px;z-index:1000}div#fixedcard-dashboard:hover{opacity:1;-ms-filter:none;filter:none}div#fixedcard-dashboard:hover button.fixedcard-activebtn{width:30px;opacity:1;-ms-filter:none;filter:none;pointer-events:all}button.fixedcard-activebtn{width:0;height:30px;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;opacity:0;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:distribute;-moz-box-pack:distribute;-o-box-pack:distribute;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;pointer-events:none;color:#757273}.fixedcard-user-avatar{display:inline-block}.fixedcard-user-avatar img.fixedcard-user-avatar-img{width:30px;height:30px;border-radius:50%}[data-theme=dark] div#fixedcard-dashboard{background:rgba(55,55,55,.9)}[data-theme=dark] button.fixedcard-activebtn{color:#bcbdbd}div#quit-box{position:fixed;display:block;left:0;top:0;width:100vh;height:100vh;z-index:99;background:rgba(25,25,25,.3)}[data-theme=dark] div#quit-box{background:rgba(147,146,128,.3)}@-moz-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@-webkit-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@-o-keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}@keyframes rotateX{from{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);-ms-transform:rotateX(90deg);transform:rotateX(90deg)}to{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-o-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0)}}.gitcalendar{border:1px solid #ddd;border-radius:3px;min-height:120px;text-align:center;margin:0 auto;border-width:0;width:100%;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;display:-webkit-flex;-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-lines:multiple;-moz-box-lines:multiple;-o-box-lines:multiple;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.gitcalendar img.spinner{width:70px;margin-top:50px;min-height:70px}.gitcalendar-graph text.month,.gitcalendar-graph text.wday{font-size:10px;fill:#aaa}.contrib-legend{text-align:right;padding:0 14px 10px 0;display:inline-block;float:right}.contrib-legend .legend{display:inline-block;list-style:none;margin:0 5px;position:relative;bottom:-1px;padding:0}.contrib-legend .legend li{display:inline-block;width:10px;height:10px}.text-small{font-size:12px;color:#767676}.gitcalendar-graph{padding:15px 0 0;text-align:center}.contrib-column{text-align:center;border-left:1px solid #ddd;border-top:1px solid #ddd;font-size:11px}.contrib-column-first{border-left:0}.table-column{padding:10px;display:table-cell;width:33%;vertical-align:top}.contrib-number{font-weight:300;line-height:1.3em;font-size:24px;display:block}.monospace{text-align:center;color:#000}.monospace a{color:#1d75ab;text-decoration:none}.contrib-footer{font-size:11px;padding:0 10px 12px;text-align:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:26px}.left.text-muted{float:left;margin-left:9px;color:#767676}.left.text-muted a{color:#4078c0;text-decoration:none}.left.text-muted a:hover,.monospace a:hover{text-decoration:underline}h2.f4.text-normal.mb-3{display:none}.float-left.text-gray{float:left}#user-activity-overview{display:none}.day-tooltip{white-space:nowrap;position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.85);border-radius:3px;display:none;pointer-events:none}.day-tooltip strong{color:#dfe2e5}.day-tooltip.is-visible{display:block}.day-tooltip:after{position:absolute;bottom:-10px;left:50%;width:5px;height:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.85)}.position-relative{width:100%;padding-left:20px;padding-right:20px}@media screen and (max-width:650px){.contrib-column{display:none}}.angle-wrapper{z-index:9999;display:inline;display:none;width:200px;height:40px;position:relative;padding:5px 0;background:rgba(0,0,0,.8);border-radius:8px;text-align:center;color:#fff}.angle-wrapper span{padding-bottom:1em}.angle-wrapper:before{content:'';width:0;height:0;border:10px solid transparent;border-top-color:rgba(0,0,0,.8);position:absolute;left:47.5%;top:100%}.angle-box{position:fixed;padding:10px}#page-header{position:relative;width:100%;background-color:#49b1f5;background-position:center center;background-size:cover;background-repeat:no-repeat;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}#page-header.full_page{height:300px;background-attachment:fixed}#page-header.full_page #site-info{position:absolute;top:43%;padding:0 10px;width:100%}#page-header #scroll-down .scroll-down-effects,#page-header #site-subtitle,#page-header #site-title{text-align:center;text-shadow:2px 2px 4px rgba(0,0,0,.15);line-height:1.5}#page-header #site-title{margin:0;color:var(--white);font-size:1.85em}@media screen and (min-width:768px){#page-header #site-title{font-size:2.85em}}@media screen and (min-width:768px){#page-header #site-subtitle{font-size:1.72em}}#page-header #site_social_icons{display:none;margin:0 auto;width:300px;text-align:center}@media screen and (max-width:768px){#page-header #site_social_icons{display:block}}#page-header #site_social_icons .social-icon{margin:0 10px;color:var(--light-grey);text-shadow:2px 2px 4px rgba(0,0,0,.15);font-size:1.43em}#page-header #scroll-down{position:absolute;bottom:0;width:100%;cursor:pointer}#page-header #scroll-down .scroll-down-effects{position:relative;width:100%;color:var(--light-grey);font-size:30px}#page-header.not-home-page{height:400px}@media screen and (max-width:768px){#page-header.not-home-page{height:280px}}#page-header #page-site-info{position:absolute;top:200px;padding:0 10px;width:100%}@media screen and (max-width:768px){#page-header #page-site-info{top:140px}}#page-header.post-bg{height:400px}@media screen and (max-width:768px){#page-header.post-bg{height:360px}}#page-header #post-info{position:absolute;bottom:100px;padding:0 8%;width:100%;text-align:center}@media screen and (max-width:900px){#page-header #post-info{bottom:30px;text-align:left}#page-header #post-info .card-widget:not(#card-toc){display:none}}@media screen and (max-width:768px){#page-header #post-info{bottom:100px;padding:0 22px}}#page-header.not-top-img{margin-bottom:10px;height:60px;background:0}#page-header.not-top-img #nav{background:rgba(255,255,255,.6);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,.6);box-shadow:0 5px 6px -5px rgba(133,133,133,.6)}#page-header.not-top-img #nav a{color:var(--font-color);text-shadow:none}#page-header.nav-fixed #nav{position:fixed;top:-60px;z-index:91;background:rgba(255,255,255,.6);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,.6);box-shadow:0 5px 6px -5px rgba(133,133,133,.6);-webkit-transition:-webkit-transform .2s ease-in-out,opacity .2s ease-in-out;-moz-transition:-moz-transform .2s ease-in-out,opacity .2s ease-in-out;-o-transition:-o-transform .2s ease-in-out,opacity .2s ease-in-out;-ms-transition:-ms-transform .2s ease-in-out,opacity .2s ease-in-out;transition:transform .2s ease-in-out,opacity .2s ease-in-out}#page-header.nav-fixed #nav #site-name,#page-header.nav-fixed #nav #toggle-menu,#page-header.nav-fixed #nav a{color:var(--font-color);text-shadow:none}#page-header.nav-fixed #nav #site-name:hover,#page-header.nav-fixed #nav #toggle-menu:hover,#page-header.nav-fixed #nav a:hover{color:#49b1f5}#page-header.nav-visible #nav{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s;-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}#page-header.nav-visible+.layout>.aside-content>.sticky_layout{top:70px;-webkit-transition:top .5s;-moz-transition:top .5s;-o-transition:top .5s;-ms-transition:top .5s;transition:top .5s}#page h1.page-title{margin:8px 0 20px}#post>#post-info{margin-bottom:30px}#post>#post-info .post-title{padding-bottom:4px;border-bottom:1px solid var(--light-grey);color:var(--text-highlight-color)}#post>#post-info .post-title .post-edit-link{float:right}#post>#post-info #post-meta,#post>#post-info #post-meta a{color:#78818a}#post-info .post-title{margin-bottom:8px;color:var(--white);font-weight:400;font-size:2.5em;line-height:1.5;-webkit-line-clamp:3}@media screen and (max-width:768px){#post-info .post-title{font-size:2.1em}}#post-info .post-title .post-edit-link{padding-left:10px}#post-info #post-meta{color:var(--light-grey);font-size:95%}@media screen and (min-width:768px){#post-info #post-meta>.meta-secondline>span:first-child{display:none}}@media screen and (max-width:768px){#post-info #post-meta{font-size:90%}#post-info #post-meta>.meta-firstline,#post-info #post-meta>.meta-secondline{display:inline}}#post-info #post-meta .post-meta-separator{margin:0 5px}#post-info #post-meta .post-meta-icon{margin-right:4px}#post-info #post-meta .post-meta-label{margin-right:4px}#post-info #post-meta a{color:var(--light-grey);-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}#post-info #post-meta a:hover{color:#49b1f5;text-decoration:underline}@media screen and (max-width:768px){#nav{padding:0 16px}}#nav.show{opacity:1;-ms-filter:none;filter:none}#nav #blog_name{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}#nav #toggle-menu{display:none;padding:2px 0 0 6px;vertical-align:top}#nav #toggle-menu:hover{color:var(--white)}#nav a{color:var(--light-grey)}#nav a:hover{color:var(--white)}#nav #site-name{text-shadow:2px 2px 4px rgba(0,0,0,.15);font-weight:700;cursor:pointer}#nav .menus_items{display:inline}#nav .menus_items .menus_item:hover .menus_item_child{display:block}#nav .menus_items .menus_item:hover>a>i:last-child{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#nav .menus_items .menus_item>a>i:last-child{padding:4px;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#nav .menus_items .menus_item .menus_item_child{position:absolute;right:0;display:none;margin-top:8px;padding:0;width:max-content;background-color:var(--sidebar-bg);-webkit-box-shadow:0 5px 20px -4px rgba(0,0,0,.5);box-shadow:0 5px 20px -4px rgba(0,0,0,.5);-webkit-animation:sub_menus .3s .1s ease both;-moz-animation:sub_menus .3s .1s ease both;-o-animation:sub_menus .3s .1s ease both;-ms-animation:sub_menus .3s .1s ease both;animation:sub_menus .3s .1s ease both;border-radius:5px}#nav .menus_items .menus_item .menus_item_child:before{position:absolute;top:-8px;left:0;width:100%;height:20px;content:''}#nav.hide-menu #toggle-menu{display:inline-block!important}#nav.hide-menu #toggle-menu .site-page{font-size:inherit}#nav.hide-menu .menus_items{display:none}#nav.hide-menu #search-button span{display:none}#nav #search-button{display:inline;padding:0 0 0 14px}#nav .site-page{position:relative;padding-bottom:6px;text-shadow:1px 1px 2px rgba(0,0,0,.3);font-size:.78em;cursor:pointer}#loading-box .loading-right-bg{right:0}#loading-box .spinner-box{position:fixed;z-index:1001;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-o-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;width:100%;height:100vh}#loading-box .spinner-box .configure-border-1{position:absolute;padding:3px;width:115px;height:115px;background:#ffab91;-webkit-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-moz-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-o-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;-ms-animation:configure-clockwise 3s ease-in-out 0s infinite alternate;animation:configure-clockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .configure-border-2{left:-115px;padding:3px;width:115px;height:115px;background:#3ff9dc;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-moz-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-o-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;-ms-animation:configure-xclockwise 3s ease-in-out 0s infinite alternate;animation:configure-xclockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .loading-word{position:absolute;color:var(--preloader-color);font-size:16px}#loading-box .spinner-box .configure-core{width:100%;height:100%;background-color:var(--lyx-white-acrylic)}#loading-box.loaded .loading-left-bg{-webkit-transition:all .7s;-moz-transition:all .7s;-o-transition:all .7s;-ms-transition:all .7s;transition:all .7s;opacity:0}#loading-box.loaded .loading-right-bg{-webkit-transition:all .7s;-moz-transition:all .7s;-o-transition:all .7s;-ms-transition:all .7s;transition:all .7s;opacity:0}#loading-box.loaded .spinner-box{display:none}#loading-box.loaded #loadcat{display:none}#loading-box.loadend .loading-left-bg{display:none}#loading-box.loadend .loading-right-bg{display:none}@-moz-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes configure-clockwise{0%{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@-webkit-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@-o-keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}@keyframes configure-xclockwise{0%{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}25%{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}50%{-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-o-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}75%{-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-o-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}100%{-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-o-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}}#pagination .pagination{margin-top:20px;text-align:center}#pagination .pagination-info{position:absolute;top:50%;padding:20px 40px;width:100%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}#pagination .next_info,#pagination .prev_info{color:var(--white);font-weight:500}#pagination .next-post .pagination-info{text-align:right}#pagination .pull-full{width:100%!important}#pagination .next-post .label,#pagination .prev-post .label{color:var(--light-grey);text-transform:uppercase;font-size:90%}#pagination .next-post,#pagination .prev-post{width:50%}@media screen and (max-width:768px){#pagination .next-post,#pagination .prev-post{width:100%}}#pagination .next-post a,#pagination .prev-post a{position:relative;display:block;overflow:hidden;height:150px}#pagination.pagination-post{overflow:hidden;margin-top:40px;width:100%;background:#000}.layout>.recent-posts .pagination>*{display:inline-block;margin:0 6px;width:2.5em;height:2.5em;line-height:2.5em}.layout>.recent-posts .pagination>:not(.space):hover{background:var(--btn-hover-color);color:var(--btn-color)}.layout>div:not(.recent-posts) .pagination .page-number{display:inline-block;margin:0 4px;min-width:24px;height:24px;text-align:center;line-height:24px;cursor:pointer}#article-container{word-wrap:break-word;overflow-wrap:break-word}#article-container a{color:#49b1f5}#article-container a:hover{text-decoration:underline}#article-container img{display:block;margin:0 auto 20px;max-width:100%;-webkit-transition:filter 375ms ease-in .2s;-moz-transition:filter 375ms ease-in .2s;-o-transition:filter 375ms ease-in .2s;-ms-transition:filter 375ms ease-in .2s;transition:filter 375ms ease-in .2s}#article-container p{margin:0 0 16px}#article-container iframe{margin:0 0 20px}#article-container kbd{margin:0 3px;padding:3px 5px;border:1px solid #b4b4b4;border-radius:3px;background-color:#f8f8f8;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),0 2px 1px 0 rgba(255,255,255,.6) inset;box-shadow:0 1px 3px rgba(0,0,0,.25),0 2px 1px 0 rgba(255,255,255,.6) inset;color:#34495e;white-space:nowrap;font-weight:600;font-size:.9em;font-family:Monaco,'Ubuntu Mono',monospace;line-height:1em}#article-container ol ol,#article-container ol ul,#article-container ul ol,#article-container ul ul{padding-left:20px}#article-container ol li,#article-container ul li{margin:4px 0}#article-container ol p,#article-container ul p{margin:0 0 8px}#article-container.post-content h1,#article-container.post-content h2,#article-container.post-content h3,#article-container.post-content h4,#article-container.post-content h5,#article-container.post-content h6{-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transition:all .2s ease-out}#article-container.post-content h1:before,#article-container.post-content h2:before,#article-container.post-content h3:before,#article-container.post-content h4:before,#article-container.post-content h5:before,#article-container.post-content h6:before{position:absolute;top:calc(50% - 7px);color:#f47466;content:'\f863';line-height:1;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transition:all .2s ease-out}#article-container.post-content h1:hover:before,#article-container.post-content h2:hover:before,#article-container.post-content h3:hover:before,#article-container.post-content h4:hover:before,#article-container.post-content h5:hover:before,#article-container.post-content h6:hover:before{color:#49b1f5}#article-container.post-content h1{padding-left:32px}#article-container.post-content h1:before{margin-left:-26px;font-size:20px}#article-container.post-content h1:hover{padding-left:38px}#article-container.post-content h2{padding-left:30px}#article-container.post-content h2:before{margin-left:-24px;font-size:18px}#article-container.post-content h2:hover{padding-left:36px}#article-container.post-content h3{padding-left:28px}#article-container.post-content h3:before{margin-left:-22px;font-size:16px}#article-container.post-content h3:hover{padding-left:34px}#article-container.post-content h4{padding-left:26px}#article-container.post-content h4:before{margin-left:-20px;font-size:14px}#article-container.post-content h4:hover{padding-left:32px}#article-container.post-content h5{padding-left:24px}#article-container.post-content h5:before{margin-left:-18px;font-size:12px}#article-container.post-content h5:hover{padding-left:30px}#article-container.post-content h6{padding-left:24px}#article-container.post-content h6:before{margin-left:-18px;font-size:12px}#article-container.post-content h6:hover{padding-left:30px}#article-container.post-content ol p,#article-container.post-content ul p{margin:0 0 8px}#article-container.post-content li::marker{color:#49b1f5;font-weight:600;font-size:1.05em}#article-container.post-content li:hover::marker{color:var(--pseudo-hover)}#article-container.post-content ul>li{list-style-type:circle}#article-container>:last-child{margin-bottom:0!important}#post .tag_share:after{display:block;clear:both;content:''}#post .tag_share .post-meta__tag-list{display:inline-block}#post .tag_share .post-meta__tags{display:inline-block;margin:8px 8px 8px 0;padding:0 12px;width:fit-content;border:1px solid #49b1f5;border-radius:12px;color:#49b1f5;font-size:.85em;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#post .tag_share .post-meta__tags:hover{background:#49b1f5;color:var(--white)}#post .tag_share .post_share{display:inline-block;float:right;margin:8px 0 0;width:fit-content}#post .tag_share .post_share .social-share{font-size:.85em}#post .tag_share .post_share .social-share .social-share-icon{margin:0 4px;width:1.85em;height:1.85em;font-size:1.2em;line-height:1.85em}#post .post-copyright{position:relative;margin:2rem 0 .5rem;padding:.5rem .8rem;border:1px solid #c9c9c9;-webkit-transition:box-shadow .3s ease-in-out;-moz-transition:box-shadow .3s ease-in-out;-o-transition:box-shadow .3s ease-in-out;-ms-transition:box-shadow .3s ease-in-out;transition:box-shadow .3s ease-in-out;overflow:hidden;border-radius:12px!important;background-color:#fff}#post .post-copyright:before{background:var(--heo-post-blockquote-bg);position:absolute;right:-26px;top:-120px;content:'\f25e';font-size:200px;font-family:'Font Awesome 5 Brands';opacity:.2}#post .post-copyright:hover{-webkit-box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5);box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5)}#post .post-copyright .post-copyright-info{padding-left:.3rem}#post .post-copyright .post-copyright-info a{text-decoration:none;word-break:break-word}#post .post-copyright .post-copyright-info a:hover{text-decoration:none}#post .post-copyright-cc-info{color:#49b1f5}#post .post-outdate-notice{position:relative;margin:0 0 1rem;padding:.5em 1.2em;border-radius:15px;background-color:#ffe6e6;color:#f66;padding:.5em 1em .5em 2.6em;border-left:5px solid #ff8080}#post .post-outdate-notice:before{position:absolute;top:50%;left:.9em;color:#ff8080;content:'\f071';-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#post .ads-wrap{margin:40px 0}.relatedPosts{margin-top:40px}.relatedPosts>.headline{margin-bottom:5px;font-weight:700;font-size:1.43em}.relatedPosts>.relatedPosts-list>div{position:relative;display:inline-block;overflow:hidden;margin:3px;width:calc(33.333% - 6px);height:200px;background:#000;vertical-align:bottom}@media screen and (max-width:768px){.relatedPosts>.relatedPosts-list>div{margin:2px;width:calc(50% - 4px);height:150px}}@media screen and (max-width:600px){.relatedPosts>.relatedPosts-list>div{width:calc(100% - 4px)}}.relatedPosts>.relatedPosts-list .content{position:absolute;top:50%;padding:0 20px;width:100%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.relatedPosts>.relatedPosts-list .content .date{color:var(--light-grey);font-size:90%}.relatedPosts>.relatedPosts-list .content .title{color:var(--white);-webkit-line-clamp:2}.post-reward{position:relative;margin-top:80px;width:100%;text-align:center;pointer-events:none}.post-reward>*{pointer-events:auto}.post-reward .reward-button{display:inline-block;padding:4px 24px;background:var(--btn-bg);color:var(--btn-color);cursor:pointer}.post-reward:hover .reward-button{background:var(--btn-hover-color)}.post-reward:hover>.reward-main{display:block}.post-reward .reward-main{position:absolute;bottom:40px;left:0;z-index:100;display:none;padding:0 0 15px;width:100%}.post-reward .reward-main .reward-all{display:inline-block;margin:0;padding:20px 10px;border-radius:4px;background:var(--reward-pop)}.post-reward .reward-main .reward-all:before{position:absolute;bottom:-10px;left:0;width:100%;height:20px;content:''}.post-reward .reward-main .reward-all:after{position:absolute;right:0;bottom:2px;left:0;margin:0 auto;width:0;height:0;border-top:13px solid var(--reward-pop);border-right:13px solid transparent;border-left:13px solid transparent;content:''}.post-reward .reward-main .reward-all .reward-item{display:inline-block;padding:0 8px;list-style-type:none;vertical-align:top}.post-reward .reward-main .reward-all .reward-item img{width:130px;height:130px}.post-reward .reward-main .reward-all .reward-item .post-qr-code-desc{width:130px;color:#858585}#rightside #rightside-config-hide{height:0;opacity:0;-webkit-transition:-webkit-transform .4s;-moz-transition:-moz-transform .4s;-o-transition:-o-transform .4s;-ms-transition:-ms-transform .4s;transition:transform .4s;-webkit-transform:translate(45px,0);-moz-transform:translate(45px,0);-o-transform:translate(45px,0);-ms-transform:translate(45px,0);transform:translate(45px,0)}#rightside #rightside-config-hide.show{height:auto;opacity:1;-ms-filter:none;filter:none;-webkit-transform:translate(0,0);-moz-transform:translate(0,0);-o-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}#rightside #rightside-config-hide.status{height:auto;opacity:1;-ms-filter:none;filter:none}#rightside>div>a:hover,#rightside>div>button:hover{background-color:var(--btn-hover-color)}#rightside #mobile-toc-button{display:none}@media screen and (max-width:900px){#rightside #mobile-toc-button{display:block}#rightside #mobile-toc-button .card-widget:not(#card-toc){display:none}}@media screen and (max-width:900px){#rightside #hide-aside-btn{display:none}#rightside .card-widget:not(#card-toc){display:none}}#sidebar #menu-mask{position:fixed;z-index:102;display:none;width:100%;height:100%;background:rgba(0,0,0,.8)}#sidebar #sidebar-menus.open{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);-o-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}#sidebar #sidebar-menus>.avatar-img{margin:20px auto}#sidebar #sidebar-menus .sidebar-site-data{padding:0 10px}#sidebar #sidebar-menus hr{margin:20px auto}#sidebar #sidebar-menus .menus_items{padding:0 10px 40px}#sidebar #sidebar-menus .menus_items .site-page:hover{background:#f05011}#sidebar #sidebar-menus .menus_items .site-page i:first-child{width:15%;text-align:left}#sidebar #sidebar-menus .menus_items .site-page.group>i:last-child{position:absolute;top:.78em;right:18px;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;-o-transition:-o-transform .3s;-ms-transition:-ms-transform .3s;transition:transform .3s}#sidebar #sidebar-menus .menus_items .site-page.group.hide>i:last-child{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}#sidebar #sidebar-menus .menus_items .site-page.group.hide+.menus_item_child{display:none}#sidebar #sidebar-menus .menus_items .menus_item_child{margin:0;list-style:none}#vcomment{font-size:1.1em}#vcomment .vbtn{border:none;background:var(--btn-bg);color:var(--btn-color)}#vcomment .vbtn:hover{background:var(--btn-hover-color)}#vcomment .vimg{-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}#vcomment .vimg:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}#vcomment .vcards .vcard .vcontent.expand:after,#vcomment .vcards .vcard .vcontent.expand:before{z-index:22}#waline-wrap{--waline-font-size:1.1em;--waline-theme-color:#49b1f5;--waline-active-color:#ff7242}#waline-wrap .vuser{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}#waline-wrap .vuser:hover{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}.fireworks{position:fixed;top:0;left:0;z-index:-1;pointer-events:none}.medium-zoom-image--opened{z-index:99999!important;margin:0!important}.medium-zoom-overlay{z-index:99999!important}.mermaid-wrap{margin:0 0 20px;text-align:center}.mermaid-wrap>svg{height:100%}.fb-comments iframe,.utterances{width:100%!important}#gitalk-container .gt-meta{margin:0 0 .8em;padding:6px 0 16px}.katex-wrap{overflow:auto}.katex-wrap::-webkit-scrollbar{display:none}.has-jax,mjx-container[display]{overflow-x:auto;overflow-y:hidden;line-height:normal!important}.aplayer{color:#4c4948}#article-container .aplayer{margin:0 0 20px}#article-container .aplayer ol,#article-container .aplayer ul{margin:0;padding:0}#article-container .aplayer ol li,#article-container .aplayer ul li{margin:0;padding:0 15px}#article-container .aplayer ol li:before,#article-container .aplayer ul li:before{content:none}.snackbar-css{border-radius:5px!important}#article-container .btn-center{margin:0 0 20px;text-align:center}#article-container .btn-beautify{display:inline-block;margin:0 4px 6px;padding:0 15px;background-color:var(--btn-beautify-color,#777);color:#fff;line-height:2}#article-container .btn-beautify.blue{--btn-beautify-color:#428bca}#article-container .btn-beautify.pink{--btn-beautify-color:#ff69b4}#article-container .btn-beautify.red{--btn-beautify-color:#f00}#article-container .btn-beautify.purple{--btn-beautify-color:#6f42c1}#article-container .btn-beautify.orange{--btn-beautify-color:#ff8c00}#article-container .btn-beautify.green{--btn-beautify-color:#5cb85c}#article-container .btn-beautify:hover{background-color:var(--btn-hover-color)}#article-container .btn-beautify i+span{margin-left:6px}#article-container .btn-beautify:not(.block)+.btn-beautify:not(.block){margin:0 4px 20px}#article-container .btn-beautify.block{display:block;margin:0 0 20px;width:fit-content;width:-moz-fit-content}#article-container .btn-beautify.block.center{margin:0 auto 20px}#article-container .btn-beautify.block.right{margin:0 0 20px auto}#article-container .btn-beautify.larger{padding:6px 15px}#article-container .btn-beautify:hover{text-decoration:none}#article-container .btn-beautify.outline{border:1px solid transparent;border-color:var(--btn-beautify-color,#777);background-color:transparent;color:var(--btn-beautify-color,#777)}#article-container .btn-beautify.outline:hover{background-color:var(--btn-beautify-color,#777)}#article-container .btn-beautify.outline:hover{color:#fff!important}#article-container figure.gallery-group{position:relative;float:left;overflow:hidden;margin:6px 4px;width:calc(50% - 8px);height:250px;border-radius:12px;background:#000;-webkit-transform:translate3d(0,0,0)}@media screen and (max-width:600px){#article-container figure.gallery-group{width:calc(100% - 8px)}}#article-container figure.gallery-group:hover img{opacity:.4;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group:hover .gallery-group-name::after{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group:hover p{opacity:1;-ms-filter:none;filter:none;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#article-container figure.gallery-group img{position:relative;margin:0;max-width:none;width:calc(100% + 20px);height:250px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;opacity:.8;-webkit-transition:all .3s,filter 375ms ease-in .2s;-moz-transition:all .3s,filter 375ms ease-in .2s;-o-transition:all .3s,filter 375ms ease-in .2s;-ms-transition:all .3s,filter 375ms ease-in .2s;transition:all .3s,filter 375ms ease-in .2s;-webkit-transform:translate3d(-10px,0,0);-moz-transform:translate3d(-10px,0,0);-o-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0);object-fit:cover}#article-container figure.gallery-group figcaption{position:absolute;top:0;left:0;padding:30px;width:100%;height:100%;color:#fff;text-transform:uppercase;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}#article-container figure.gallery-group figcaption>a{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000;opacity:0}#article-container figure.gallery-group p{margin:0;padding:8px 0 0;letter-spacing:1px;font-size:1.1em;line-height:1.5;opacity:0;-webkit-transition:opacity .35s,-webkit-transform .35s;-moz-transition:opacity .35s,-moz-transform .35s;-o-transition:opacity .35s,-o-transform .35s;-ms-transition:opacity .35s,-ms-transform .35s;transition:opacity .35s,transform .35s;-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);-o-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-line-clamp:4}#article-container figure.gallery-group .gallery-group-name{position:relative;margin:0;padding:8px 0;font-weight:700;font-size:1.65em;line-height:1.5;-webkit-line-clamp:2}#article-container figure.gallery-group .gallery-group-name:after{position:absolute;bottom:0;left:0;width:100%;height:2px;background:#fff;content:'';-webkit-transition:-webkit-transform .35s;-moz-transition:-moz-transform .35s;-o-transition:-o-transform .35s;-ms-transition:-ms-transform .35s;transition:transform .35s;-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);-o-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}#article-container .gallery-group-main{overflow:auto;padding:0 0 16px}#article-container .fj-gallery{margin:0 0 16px;opacity:0}#article-container .fj-gallery .img-alt{display:none}blockquote.pullquote{position:relative;max-width:45%;font-size:110%}blockquote.pullquote.left{float:left;margin:1em .5em 0 0}blockquote.pullquote.right{float:right;margin:1em 0 0 .5em}.video-container{position:relative;overflow:hidden;margin-bottom:16px;padding-top:56.25%;height:0}.video-container iframe{position:absolute;top:0;left:0;margin-top:0;width:100%;height:100%}.hide-block>.hide-button,.hide-inline>.hide-button{display:inline-block;padding:5px 18px;background:#49b1f5;color:var(--white)}.hide-block>.hide-button:hover,.hide-inline>.hide-button:hover{background-color:var(--btn-hover-color)}.hide-block>.hide-button.open,.hide-inline>.hide-button.open{display:none}.hide-block>.hide-button.open+div,.hide-inline>.hide-button.open+div{display:block}.hide-block>.hide-button.open+span,.hide-inline>.hide-button.open+span{display:inline}.hide-block>.hide-content,.hide-inline>.hide-content{display:none}.hide-inline>.hide-button{margin:0 6px}.hide-inline>.hide-content{margin:0 6px}.hide-block{margin:0 0 16px}.toggle{margin-bottom:20px;border:1px solid #f0f0f0}.toggle>.toggle-button{padding:6px 15px;background:#f0f0f0;color:#1f2d3d;cursor:pointer}.toggle>.toggle-content{margin:30px 24px}#article-container .inline-img{display:inline;margin:0 3px;height:1.1em;vertical-align:text-bottom}.hl-label{padding:2px 4px;border-radius:3px;color:#fff}.hl-label.default{background-color:#777}.hl-label.blue{background-color:#428bca}.hl-label.pink{background-color:#ff69b4}.hl-label.red{background-color:red}.hl-label.purple{background-color:#6f42c1}.hl-label.orange{background-color:#ff8c00}.hl-label.green{background-color:#5cb85c}.note{position:relative;margin:0 0 20px;padding:15px;border-radius:5px}.note.icon{padding-left:3em}.note>.note-icon{position:absolute;top:calc(50% - .5em);left:.8em;font-size:larger}.note.blue:not(.disabled){border-left-color:#428bca!important}.note.blue:not(.disabled).modern{border-left-color:transparent!important;color:#428bca}.note.blue:not(.disabled):not(.simple){background:#e3eef7!important}.note.blue>.note-icon{color:#428bca}.note.pink:not(.disabled){border-left-color:#ff69b4!important}.note.pink:not(.disabled).modern{border-left-color:transparent!important;color:#ff69b4}.note.pink:not(.disabled):not(.simple){background:#ffe9f4!important}.note.pink>.note-icon{color:#ff69b4}.note.red:not(.disabled){border-left-color:red!important}.note.red:not(.disabled).modern{border-left-color:transparent!important;color:red}.note.red:not(.disabled):not(.simple){background:#ffd9d9!important}.note.red>.note-icon{color:red}.note.purple:not(.disabled){border-left-color:#6f42c1!important}.note.purple:not(.disabled).modern{border-left-color:transparent!important;color:#6f42c1}.note.purple:not(.disabled):not(.simple){background:#e9e3f6!important}.note.purple>.note-icon{color:#6f42c1}.note.orange:not(.disabled){border-left-color:#ff8c00!important}.note.orange:not(.disabled).modern{border-left-color:transparent!important;color:#ff8c00}.note.orange:not(.disabled):not(.simple){background:#ffeed9!important}.note.orange>.note-icon{color:#ff8c00}.note.green:not(.disabled){border-left-color:#5cb85c!important}.note.green:not(.disabled).modern{border-left-color:transparent!important;color:#5cb85c}.note.green:not(.disabled):not(.simple){background:#e7f4e7!important}.note.green>.note-icon{color:#5cb85c}.note.simple{border:1px solid #eee;border-left-width:5px}.note.modern{border:1px solid transparent!important;background-color:#f5f5f5;color:#4c4948}.note.flat{border:initial;border-left:5px solid #eee;background-color:#f9f9f9;color:#4c4948}.note h2,.note h3,.note h4,.note h5,.note h6{margin-top:3px;margin-bottom:0;padding-top:0!important;border-bottom:initial}.note blockquote:first-child,.note img:first-child,.note ol:first-child,.note p:first-child,.note pre:first-child,.note table:first-child,.note ul:first-child{margin-top:0!important}.note blockquote:last-child,.note img:last-child,.note ol:last-child,.note p:last-child,.note pre:last-child,.note table:last-child,.note ul:last-child{margin-bottom:0!important}.note:not(.no-icon){padding-left:3em}.note:not(.no-icon)::before{position:absolute;top:calc(50% - .95em);left:.8em;font-size:larger}.note.default.flat{background:#f7f7f7}.note.default.modern{border-color:#e1e1e1;background:#f3f3f3;color:#666}.note.default.modern a:not(.btn){color:#666}.note.default.modern a:not(.btn):hover{color:#454545}.note.default:not(.modern){border-left-color:#777}.note.default:not(.modern) h2,.note.default:not(.modern) h3,.note.default:not(.modern) h4,.note.default:not(.modern) h5,.note.default:not(.modern) h6{color:#777}.note.default:not(.no-icon)::before{content:'\f0a9'}.note.default:not(.no-icon):not(.modern)::before{color:#777}.note.primary.flat{background:#f5f0fa}.note.primary.modern{border-color:#e1c2ff;background:#f3daff;color:#6f42c1}.note.primary.modern a:not(.btn){color:#6f42c1}.note.primary.modern a:not(.btn):hover{color:#453298}.note.primary:not(.modern){border-left-color:#6f42c1}.note.primary:not(.modern) h2,.note.primary:not(.modern) h3,.note.primary:not(.modern) h4,.note.primary:not(.modern) h5,.note.primary:not(.modern) h6{color:#6f42c1}.note.primary:not(.no-icon)::before{content:'\f055'}.note.primary:not(.no-icon):not(.modern)::before{color:#6f42c1}.note.info.flat{background:#eef7fa}.note.info.modern{border-color:#b3e5ef;background:#d9edf7;color:#31708f}.note.info.modern a:not(.btn){color:#31708f}.note.info.modern a:not(.btn):hover{color:#215761}.note.info:not(.modern){border-left-color:#428bca}.note.info:not(.modern) h2,.note.info:not(.modern) h3,.note.info:not(.modern) h4,.note.info:not(.modern) h5,.note.info:not(.modern) h6{color:#428bca}.note.info:not(.no-icon)::before{content:'\f05a'}.note.info:not(.no-icon):not(.modern)::before{color:#428bca}.note.success.flat{background:#eff8f0}.note.success.modern{border-color:#d0e6be;background:#dff0d8;color:#3c763d}.note.success.modern a:not(.btn){color:#3c763d}.note.success.modern a:not(.btn):hover{color:#32562c}.note.success:not(.modern){border-left-color:#5cb85c}.note.success:not(.modern) h2,.note.success:not(.modern) h3,.note.success:not(.modern) h4,.note.success:not(.modern) h5,.note.success:not(.modern) h6{color:#5cb85c}.note.success:not(.no-icon)::before{content:'\f058'}.note.success:not(.no-icon):not(.modern)::before{color:#5cb85c}.note.warning.flat{background:#fdf8ea}.note.warning.modern{border-color:#fae4cd;background:#fcf4e3;color:#8a6d3b}.note.warning.modern a:not(.btn){color:#8a6d3b}.note.warning.modern a:not(.btn):hover{color:#714f30}.note.warning:not(.modern){border-left-color:#f0ad4e}.note.warning:not(.modern) h2,.note.warning:not(.modern) h3,.note.warning:not(.modern) h4,.note.warning:not(.modern) h5,.note.warning:not(.modern) h6{color:#f0ad4e}.note.warning:not(.no-icon)::before{content:'\f06a'}.note.warning:not(.no-icon):not(.modern)::before{color:#f0ad4e}.note.danger.flat{background:#fcf1f2}.note.danger.modern{border-color:#ebcdd2;background:#f2dfdf;color:#a94442}.note.danger.modern a:not(.btn){color:#a94442}.note.danger.modern a:not(.btn):hover{color:#84333f}.note.danger:not(.modern){border-left-color:#d9534f}.note.danger:not(.modern) h2,.note.danger:not(.modern) h3,.note.danger:not(.modern) h4,.note.danger:not(.modern) h5,.note.danger:not(.modern) h6{color:#d9534f}.note.danger:not(.no-icon)::before{content:'\f056'}.note.danger:not(.no-icon):not(.modern)::before{color:#d9534f}#article-container .tabs{position:relative;margin:0 0 20px;border-right:1px solid var(--tab-border-color);border-bottom:1px solid var(--tab-border-color);border-left:1px solid var(--tab-border-color)}#article-container .tabs>.nav-tabs{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-lines:multiple;-moz-box-lines:multiple;-o-box-lines:multiple;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;background:var(--tab-botton-bg)}#article-container .tabs>.nav-tabs>.tab{margin:0;padding:0;list-style:none}@media screen and (max-width:768px){#article-container .tabs>.nav-tabs>.tab{-webkit-box-flex:1;-moz-box-flex:1;-o-box-flex:1;-ms-box-flex:1;box-flex:1;-webkit-flex-grow:1;flex-grow:1}}#article-container .tabs>.nav-tabs>.tab button{display:block;padding:8px 18px;width:100%;border-top:2px solid var(--tab-border-color);background:var(--tab-botton-bg);color:var(--tab-botton-color);line-height:2;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;-ms-transition:all .4s;transition:all .4s}#article-container .tabs>.nav-tabs>.tab button i{width:1.5em}#article-container .tabs>.nav-tabs>.tab.active button{border-top:2px solid #49b1f5;background:var(--tab-button-active-bg);cursor:default}#article-container .tabs>.nav-tabs>.tab:not(.active) button:hover{border-top:2px solid var(--tab-button-hover-bg);background:var(--tab-button-hover-bg)}#article-container .tabs>.tab-contents .tab-item-content{position:relative;display:none;padding:36px 24px}@media screen and (max-width:768px){#article-container .tabs>.tab-contents .tab-item-content{padding:24px 14px}}#article-container .tabs>.tab-contents .tab-item-content.active{display:block;-webkit-animation:tabshow .5s;-moz-animation:tabshow .5s;-o-animation:tabshow .5s;-ms-animation:tabshow .5s;animation:tabshow .5s}#article-container .tabs .tab-to-top{position:relative;display:block;margin:0 0 0 auto;color:#99a9bf}@-moz-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-o-keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@keyframes tabshow{0%{-webkit-transform:translateY(15px);-moz-transform:translateY(15px);-o-transform:translateY(15px);-ms-transform:translateY(15px);transform:translateY(15px)}100%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}#article-container .timeline{margin:0 0 20px 10px;padding:14px 20px 5px;border-left:2px solid var(--timeline-color,#49b1f5)}#article-container .timeline.blue{--timeline-color:#428bca;--timeline-bg:rgba(66,139,202, 0.2)}#article-container .timeline.pink{--timeline-color:#ff69b4;--timeline-bg:rgba(255,105,180, 0.2)}#article-container .timeline.red{--timeline-color:#f00;--timeline-bg:rgba(255,0,0, 0.2)}#article-container .timeline.purple{--timeline-color:#6f42c1;--timeline-bg:rgba(111,66,193, 0.2)}#article-container .timeline.orange{--timeline-color:#ff8c00;--timeline-bg:rgba(255,140,0, 0.2)}#article-container .timeline.green{--timeline-color:#5cb85c;--timeline-bg:rgba(92,184,92, 0.2)}#article-container .timeline .timeline-item{margin:0 0 15px}#article-container .timeline .timeline-item:hover .item-circle:before{border-color:var(--timeline-color,#49b1f5)}#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle>p{font-weight:600;font-size:1.2em}#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before{left:-28px;border:4px solid var(--timeline-color,#49b1f5)}#article-container .timeline .timeline-item.headline:hover .item-circle:before{border-color:var(--pseudo-hover)}#article-container .timeline .timeline-item .timeline-item-title{position:relative}#article-container .timeline .timeline-item .item-circle:before{position:absolute;top:50%;left:-27px;width:6px;height:6px;border:3px solid var(--pseudo-hover);border-radius:50%;background:var(--card-bg);content:'';-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-o-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}#article-container .timeline .timeline-item .item-circle>p{margin:0 0 8px;font-weight:500}#article-container .timeline .timeline-item .timeline-item-content{position:relative;padding:12px 15px;border-radius:12px;background:var(--timeline-bg,#e4f3fd);font-size:.93em}#article-container .timeline .timeline-item .timeline-item-content>:last-child{margin-bottom:0}#article-container .timeline+.timeline{margin-top:-20px}[data-theme=dark]{--global-bg:#0d0d0d;--font-color:rgba(255,255,255,0.7);--hr-border:rgba(255,255,255,0.4);--hr-before-color:rgba(255,255,255,0.7);--search-bg:#121212;--search-input-color:rgba(255,255,255,0.7);--search-result-title:rgba(255,255,255,0.9);--preloader-bg:#0d0d0d;--preloader-color:rgba(255,255,255,0.7);--tab-border-color:#2c2c2c;--tab-botton-bg:#2c2c2c;--tab-botton-color:rgba(255,255,255,0.7);--tab-button-hover-bg:#383838;--tab-button-active-bg:#121212;--card-bg:#121212;--sidebar-bg:#121212;--btn-hover-color:#787878;--btn-color:rgba(255,255,255,0.7);--btn-bg:#1f1f1f;--text-bg-hover:#383838;--light-grey:rgba(255,255,255,0.7);--dark-grey:rgba(255,255,255,0.2);--white:rgba(255,255,255,0.9);--text-highlight-color:rgba(255,255,255,0.9);--blockquote-color:rgba(255,255,255,0.7);--blockquote-bg:#2c2c2c;--reward-pop:#2c2c2c;--toc-link-color:rgba(255,255,255,0.6);--hl-color:rgba(255,255,255,0.7);--hl-bg:#171717;--hltools-bg:#1a1a1a;--hltools-color:#90a4ae;--hlnumber-bg:#171717;--hlnumber-color:rgba(255,255,255,0.4);--hlscrollbar-bg:#1f1f1f;--hlexpand-bg:linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9));--scrollbar-color:#1f1f1f;--timeline-bg:#1f1f1f}[data-theme=dark] #post{background-color:#0d0d0d}[data-theme=dark] #article-container code{background:#2c2c2c}[data-theme=dark] #article-container pre>code{background:#171717}[data-theme=dark] #article-container figure.highlight{-webkit-box-shadow:none;box-shadow:none}[data-theme=dark] #article-container .note code{background:rgba(27,31,35,.05)}[data-theme=dark] #article-container .aplayer{filter:brightness(.8)}[data-theme=dark] #article-container kbd{border-color:#696969;background-color:#525252;color:#e2f1ff}[data-theme=dark] #page-header.nav-fixed>#nav,[data-theme=dark] #page-header.not-top-img>#nav{background:rgba(18,18,18,.8);-webkit-box-shadow:0 5px 6px -5px rgba(133,133,133,0);box-shadow:0 5px 6px -5px rgba(133,133,133,0)}[data-theme=dark] .note{filter:brightness(.8)}[data-theme=dark] #article-container iframe,[data-theme=dark] .ads-wrap,[data-theme=dark] .btn-beautify,[data-theme=dark] .error-img,[data-theme=dark] .gist,[data-theme=dark] .hide-button,[data-theme=dark] .hl-label,[data-theme=dark] .post-outdate-notice{filter:brightness(.8)}[data-theme=dark] img{filter:brightness(.8)}[data-theme=dark] #aside-content .aside-list>.aside-list-item:not(:last-child){border-bottom:1px dashed rgba(255,255,255,.1)}[data-theme=dark] #gitalk-container{filter:brightness(.8)}[data-theme=dark] #gitalk-container svg{fill:rgba(255,255,255,.9)!important}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-no-comment,[data-theme=dark] #disqus_thread #dsqjs .dsqjs-tab-active{color:rgba(255,255,255,.7)}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-order-label{background-color:#1f1f1f}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body{color:rgba(255,255,255,.7)}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body code,[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body pre{background:#2c2c2c}[data-theme=dark] #disqus_thread #dsqjs .dsqjs-post-body blockquote{color:rgba(255,255,255,.7)}[data-theme=dark] #artitalk_main #lazy{background:#121212}[data-theme=dark] #operare_artitalk .c2{background:#121212}@media screen and (max-width:900px){[data-theme=dark] #card-toc{background:#1f1f1f}[data-theme=dark] #card-toc .card-widget:not(#card-toc){display:none}}.read-mode{--font-color:#4c4948;--readmode-light-color:#fff;--white:#4c4948;--light-grey:#4c4948;--gray:#d6dbdf;--hr-border:#d6dbdf;--hr-before-color:#b9c2c9;--highlight-bg:#f7f7f7;--exit-btn-bg:#c0c0c0;--exit-btn-color:#fff;--exit-btn-hover:#8d8d8d;--pseudo-hover:none}[data-theme=dark] .read-mode{--font-color:rgba(255,255,255,0.7);--readmode-light-color:#0d0d0d;--white:rgba(255,255,255,0.9);--light-grey:rgba(255,255,255,0.7);--gray:rgba(255,255,255,0.7);--hr-border:rgba(255,255,255,0.5);--hr-before-color:rgba(255,255,255,0.7);--highlight-bg:#171717;--exit-btn-bg:#1f1f1f;--exit-btn-color:rgba(255,255,255,0.9);--exit-btn-hover:#525252}.read-mode{background:var(--readmode-light-color)}.read-mode .exit-readmode{position:fixed;top:30px;right:30px;z-index:100;width:40px;height:40px;border-radius:12px;background:var(--exit-btn-bg);color:var(--exit-btn-color);font-size:16px;-webkit-transition:background .3s;-moz-transition:background .3s;-o-transition:background .3s;-ms-transition:background .3s;transition:background .3s}@media screen and (max-width:768px){.read-mode .exit-readmode{top:initial;bottom:30px}}.read-mode .exit-readmode:hover{background:var(--exit-btn-hover)}.read-mode #aside-content{display:none}.read-mode #page-header.post-bg{background-color:transparent;background-image:none!important}.read-mode #page-header.post-bg:before{opacity:0}.read-mode #page-header.post-bg>#post-info{text-align:center}.read-mode #post{margin:0 auto;background:0 0;-webkit-box-shadow:none;box-shadow:none}.read-mode #post:hover{-webkit-box-shadow:none;box-shadow:none}.read-mode>canvas{display:none!important}.read-mode #footer,.read-mode #nav,.read-mode #post>:not(#post-info):not(.post-content),.read-mode #rightside,.read-mode #web_bg,.read-mode .highlight-tools,.read-mode .not-top-img,.read-mode .post-outdate-notice{display:none!important}.read-mode #article-container a{color:#99a9bf}.read-mode #article-container .highlight:not(.js-file-line-container),.read-mode #article-container pre{background:var(--highlight-bg)!important}.read-mode #article-container .highlight:not(.js-file-line-container) *,.read-mode #article-container pre *{color:var(--font-color)!important}.read-mode #article-container figure.highlight{border-radius:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.read-mode #article-container figure.highlight>:not(.highlight-tools){display:block!important}.read-mode #article-container figure.highlight .line:before{color:var(--font-color)!important}.read-mode #article-container figure.highlight .hljs{background:var(-highlight-bg)!important}.read-mode #article-container h1,.read-mode #article-container h2,.read-mode #article-container h3,.read-mode #article-container h4,.read-mode #article-container h5,.read-mode #article-container h6{padding:0}.read-mode #article-container h1:before,.read-mode #article-container h2:before,.read-mode #article-container h3:before,.read-mode #article-container h4:before,.read-mode #article-container h5:before,.read-mode #article-container h6:before{content:''}.read-mode #article-container h1:hover,.read-mode #article-container h2:hover,.read-mode #article-container h3:hover,.read-mode #article-container h4:hover,.read-mode #article-container h5:hover,.read-mode #article-container h6:hover{padding:0}.read-mode #article-container li:hover:before,.read-mode #article-container ol:hover:before,.read-mode #article-container ul:hover:before{-webkit-transform:none!important;-moz-transform:none!important;-o-transform:none!important;-ms-transform:none!important;transform:none!important}.read-mode #article-container li:before,.read-mode #article-container ol:before{background:0 0!important;color:var(--font-color)!important}.read-mode #article-container ul>li:before{border-color:var(--gray)!important}.read-mode #article-container .tabs{border:2px solid var(--tab-border-color)}.read-mode #article-container .tabs>.nav-tabs{background:0 0}.read-mode #article-container .tabs>.nav-tabs>.tab{border-bottom:0}.read-mode #article-container .tabs>.nav-tabs>.tab button{border-top:none!important;background:0 0}.read-mode #article-container .tabs>.nav-tabs>.tab button:hover{background:0 0!important}.read-mode #article-container .tabs>.nav-tabs>.tab.active button{text-decoration:underline}.read-mode #article-container .tabs>.tab-contents .tab-item-content.active{-webkit-animation:none;-moz-animation:none;-o-animation:none;-ms-animation:none;animation:none}.read-mode #article-container code{color:var(--font-color)}.read-mode #article-container blockquote{border-color:var(--gray);background-color:var(--readmode-light-color)}.read-mode #article-container kbd{border:1px solid var(--gray);background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:var(--font-color)}.read-mode #article-container .hide-toggle{border:1px solid var(--gray)!important}.read-mode #article-container .btn-beautify,.read-mode #article-container .hide-button,.read-mode #article-container .hl-label{border:1px solid var(--gray)!important;background:var(--readmode-light-color)!important;color:var(--font-color)!important}.read-mode #article-container .note{border:2px solid var(--gray);border-left-color:var(--gray)!important;filter:none;background-color:var(--readmode-light-color)!important;color:var(--font-color)}.read-mode #article-container .note .note-icon,.read-mode #article-container .note:before{color:var(--font-color)}.search-dialog{position:fixed;top:10%;left:50%;z-index:1001;display:none;margin-left:-300px;padding:20px;width:600px;border-radius:12px;background:var(--search-bg)}@media screen and (max-width:768px){.search-dialog{top:0;left:0;margin:0;width:100%;height:100%;border-radius:0}}.search-dialog hr{margin:20px auto}.search-dialog .search-nav{margin:0 0 14px;color:#49b1f5;font-size:1.4em;line-height:1}.search-dialog .search-nav .search-dialog-title{margin-right:10px}.search-dialog .search-nav .search-close-button{float:right;color:#858585;-webkit-transition:color .2s ease-in-out;-moz-transition:color .2s ease-in-out;-o-transition:color .2s ease-in-out;-ms-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.search-dialog .search-nav .search-close-button:hover{color:#49b1f5}#search-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:none;background:rgba(0,0,0,.6)}#local-search .search-dialog .local-search-box{margin:0 auto;max-width:100%;width:100%}#local-search .search-dialog .local-search-box input{padding:5px 14px;width:100%;outline:0;border:2px solid #49b1f5;border-radius:40px;background:var(--search-bg);color:var(--search-input-color);-webkit-appearance:none}#local-search .search-dialog .search-wrap{display:none}#local-search .search-dialog .local-search__hit-item{position:relative;padding-left:24px;line-height:1.7}#local-search .search-dialog .local-search__hit-item:hover:before{border-color:var(--pseudo-hover)}#local-search .search-dialog .local-search__hit-item:before{position:absolute;top:.45em;left:0;width:.5em;height:.5em;border:3px solid #49b1f5;border-radius:.5em;background:0 0;content:'';line-height:.5em;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#local-search .search-dialog .local-search__hit-item a{display:block;color:var(--search-result-title);font-weight:600;cursor:pointer}#local-search .search-dialog .local-search__hit-item a:hover{color:#49b1f5}#local-search .search-dialog .local-search__hit-item .search-result{margin:0 8px 8px 0;word-break:break-all}#local-search .search-dialog .local-search__hit-item .search-keyword{color:#f47466;font-weight:700}#local-search .search-dialog .search-result-list{overflow-y:auto;max-height:calc(80vh - 130px)}@media screen and (max-width:768px){#local-search .search-dialog .search-result-list{padding-bottom:40px;max-height:75vh!important}} \ No newline at end of file diff --git a/self/img/bunterfly/bunterfly.png b/self/img/bunterfly/bunterfly.png deleted file mode 100644 index bec3f5e85..000000000 Binary files a/self/img/bunterfly/bunterfly.png and /dev/null differ diff --git a/self/img/english_cnj/english_cnj.png b/self/img/english_cnj/english_cnj.png deleted file mode 100644 index b0ef89a9f..000000000 Binary files a/self/img/english_cnj/english_cnj.png and /dev/null differ diff --git a/self/img/siteicon/README.html b/self/img/siteicon/README.html index 5185e0fcd..5332f5dc7 100644 --- a/self/img/siteicon/README.html +++ b/self/img/siteicon/README.html @@ -1,4 +1,4 @@ -GGLSS | GGLSS

                                                      Your Favicon Package

                                                      This package was generated with RealFaviconGenerator v0.16

                                                      Install instructions

                                                      To install this package:

                                                      Extract this package in <web site>/self/img/siteicon/. If your site is http://www.example.com, you should be able to access a file named http://www.example.com/self/img/siteicon/favicon.ico.

                                                      Insert the following code in the head section of your pages:

                                                      <link rel="apple-touch-icon" sizes="180x180" href="/self/img/siteicon/apple-touch-icon.png">
                                                      +GGLSS | GGLSS

                                                      Your Favicon Package

                                                      This package was generated with RealFaviconGenerator v0.16

                                                      Install instructions

                                                      To install this package:

                                                      Extract this package in <web site>/self/img/siteicon/. If your site is http://www.example.com, you should be able to access a file named http://www.example.com/self/img/siteicon/favicon.ico.

                                                      Insert the following code in the head section of your pages:

                                                      <link rel="apple-touch-icon" sizes="180x180" href="/self/img/siteicon/apple-touch-icon.png">
                                                       <link rel="icon" type="image/png" sizes="32x32" href="/self/img/siteicon/favicon-32x32.png">
                                                       <link rel="icon" type="image/png" sizes="16x16" href="/self/img/siteicon/favicon-16x16.png">
                                                       <link rel="manifest" href="/self/img/siteicon/site.webmanifest">
                                                      @@ -9,4 +9,4 @@
                                                       <meta name="msapplication-TileColor" content="#333333">
                                                       <meta name="msapplication-config" content="/self/img/siteicon/browserconfig.xml">
                                                       <meta name="theme-color" content="#ffffff">
                                                      -

                                                      Optional - Check your favicon with the favicon checker


                                                      评论
                                                      WalineValine
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +

                                                      Optional - Check your favicon with the favicon checker


                                                      评论
                                                      WalineValine
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/sw.js b/sw.js index f76aec639..c4038c7dc 100644 --- a/sw.js +++ b/sw.js @@ -1 +1 @@ -const workboxVersion="5.1.3";importScripts("https://storage.googleapis.com/workbox-cdn/releases/5.1.3/workbox-sw.js"),workbox.core.setCacheNameDetails({prefix:"your name"}),workbox.core.skipWaiting(),workbox.core.clientsClaim(),workbox.precaching.precacheAndRoute([{revision:"531c110a9fefb9b8d38d82007199323f",url:"./index.html"},{revision:"6563498f02d550740dd5b2adeb823018",url:"./js/main.js"},{revision:"8d748e15169faa3a2c259d8435e1053b",url:"./css/index.css"}],{directoryIndex:null}),workbox.precaching.cleanupOutdatedCaches(),workbox.routing.registerRoute(/\.(?:png|jpg|jpeg|gif|bmp|webp|svg|ico)$/,new workbox.strategies.CacheFirst({cacheName:"images",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/\.(?:eot|ttf|woff|woff2)$/,new workbox.strategies.CacheFirst({cacheName:"fonts",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new workbox.strategies.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets"})),workbox.routing.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new workbox.strategies.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/^https:\/\/cdn\.jsdelivr\.net/,new workbox.strategies.CacheFirst({cacheName:"static-libs",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.googleAnalytics.initialize(); \ No newline at end of file +const workboxVersion="5.1.3";importScripts("https://storage.googleapis.com/workbox-cdn/releases/5.1.3/workbox-sw.js"),workbox.core.setCacheNameDetails({prefix:"your name"}),workbox.core.skipWaiting(),workbox.core.clientsClaim(),workbox.precaching.precacheAndRoute([{revision:"bde9380765e093104911ff328e8b612b",url:"./index.html"},{revision:"6563498f02d550740dd5b2adeb823018",url:"./js/main.js"},{revision:"8d748e15169faa3a2c259d8435e1053b",url:"./css/index.css"}],{directoryIndex:null}),workbox.precaching.cleanupOutdatedCaches(),workbox.routing.registerRoute(/\.(?:png|jpg|jpeg|gif|bmp|webp|svg|ico)$/,new workbox.strategies.CacheFirst({cacheName:"images",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/\.(?:eot|ttf|woff|woff2)$/,new workbox.strategies.CacheFirst({cacheName:"fonts",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new workbox.strategies.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets"})),workbox.routing.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new workbox.strategies.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.routing.registerRoute(/^https:\/\/cdn\.jsdelivr\.net/,new workbox.strategies.CacheFirst({cacheName:"static-libs",plugins:[new workbox.expiration.ExpirationPlugin({maxEntries:1e3,maxAgeSeconds:2592e3}),new workbox.cacheableResponse.CacheableResponsePlugin({statuses:[0,200]})]})),workbox.googleAnalytics.initialize(); \ No newline at end of file diff --git a/tags/Butterfly/index.html b/tags/Butterfly/index.html index bcc86f29b..c71c58686 100644 --- a/tags/Butterfly/index.html +++ b/tags/Butterfly/index.html @@ -1 +1 @@ -标签: Butterfly | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: Butterfly | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/English/index.html b/tags/English/index.html index e9469c878..fe351454d 100644 --- a/tags/English/index.html +++ b/tags/English/index.html @@ -1 +1 @@ -标签: English | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: English | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/Git/index.html b/tags/Git/index.html index 487760ce0..770554add 100644 --- a/tags/Git/index.html +++ b/tags/Git/index.html @@ -1 +1 @@ -标签: Git | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: Git | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/Mac/index.html b/tags/Mac/index.html index da8c1f882..ade8c796a 100644 --- a/tags/Mac/index.html +++ b/tags/Mac/index.html @@ -1 +1 @@ -标签: mac | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: mac | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/Properties/index.html b/tags/Properties/index.html index 820b6a714..78d7c0901 100644 --- a/tags/Properties/index.html +++ b/tags/Properties/index.html @@ -1 +1 @@ -标签: Properties | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: Properties | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/SpringBoot/index.html b/tags/SpringBoot/index.html index 26d7b3574..a877b3cfa 100644 --- a/tags/SpringBoot/index.html +++ b/tags/SpringBoot/index.html @@ -1 +1 @@ -标签: SpringBoot | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: SpringBoot | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/css/index.html b/tags/css/index.html index 5e8337ac5..fc8025e74 100644 --- a/tags/css/index.html +++ b/tags/css/index.html @@ -1 +1 @@ -标签: css | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: css | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/docker/index.html b/tags/docker/index.html index 0d235fedf..dc88f0fca 100644 --- a/tags/docker/index.html +++ b/tags/docker/index.html @@ -1 +1 @@ -标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/docker/page/2/index.html b/tags/docker/page/2/index.html index 3d3327424..b1dba8142 100644 --- a/tags/docker/page/2/index.html +++ b/tags/docker/page/2/index.html @@ -1 +1 @@ -标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/docker/page/3/index.html b/tags/docker/page/3/index.html index 6d0272c02..d4f5ebd7e 100644 --- a/tags/docker/page/3/index.html +++ b/tags/docker/page/3/index.html @@ -1 +1 @@ -标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: docker | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/error/index.html b/tags/error/index.html index d9c00c4b6..326107923 100644 --- a/tags/error/index.html +++ b/tags/error/index.html @@ -1 +1 @@ -标签: error | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: error | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 07df94a1c..473025270 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1 +1 @@ -标签 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/java/index.html b/tags/java/index.html index 67aeb371c..48417e7ac 100644 --- a/tags/java/index.html +++ b/tags/java/index.html @@ -1 +1 @@ -标签: java | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: java | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/jmeter/index.html b/tags/jmeter/index.html index b06ac2b96..50f067895 100644 --- a/tags/jmeter/index.html +++ b/tags/jmeter/index.html @@ -1 +1 @@ -标签: jmeter | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: jmeter | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/jmeter/page/2/index.html b/tags/jmeter/page/2/index.html index 4e25f43b4..2fecc5858 100644 --- a/tags/jmeter/page/2/index.html +++ b/tags/jmeter/page/2/index.html @@ -1 +1 @@ -标签: jmeter | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: jmeter | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/postman/index.html b/tags/postman/index.html index b9c21898f..05dd5e19d 100644 --- a/tags/postman/index.html +++ b/tags/postman/index.html @@ -1 +1 @@ -标签: postman | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: postman | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/python/index.html b/tags/python/index.html index dbc259276..b82cd38b1 100644 --- a/tags/python/index.html +++ b/tags/python/index.html @@ -1 +1 @@ -标签: python | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: python | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/shell/index.html b/tags/shell/index.html index 3a88e840e..4b221dccd 100644 --- a/tags/shell/index.html +++ b/tags/shell/index.html @@ -1 +1 @@ -标签: shell | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: shell | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/sql/index.html b/tags/sql/index.html index 0dc4a34af..bfc340ed7 100644 --- a/tags/sql/index.html +++ b/tags/sql/index.html @@ -1 +1 @@ -标签: sql | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: sql | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/ubuntu/index.html b/tags/ubuntu/index.html index f676af57d..747768fae 100644 --- a/tags/ubuntu/index.html +++ b/tags/ubuntu/index.html @@ -1 +1 @@ -标签: ubuntu | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: ubuntu | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/window/index.html b/tags/window/index.html index cc6b56544..a4bf62199 100644 --- a/tags/window/index.html +++ b/tags/window/index.html @@ -1 +1 @@ -标签: window | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: window | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/xpath/index.html b/tags/xpath/index.html index fa19abf98..809e155b8 100644 --- a/tags/xpath/index.html +++ b/tags/xpath/index.html @@ -1 +1 @@ -标签: xpath | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: xpath | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git a/tags/yaml/index.html b/tags/yaml/index.html index b9a84ba9f..ad2933c37 100644 --- a/tags/yaml/index.html +++ b/tags/yaml/index.html @@ -1 +1 @@ -标签: yaml | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: yaml | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git "a/tags/\346\200\247\350\203\275\346\265\213\350\257\225/index.html" "b/tags/\346\200\247\350\203\275\346\265\213\350\257\225/index.html" index d6d5142b1..90a14e5af 100644 --- "a/tags/\346\200\247\350\203\275\346\265\213\350\257\225/index.html" +++ "b/tags/\346\200\247\350\203\275\346\265\213\350\257\225/index.html" @@ -1 +1 @@ -标签: 性能测试 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: 性能测试 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git "a/tags/\346\227\205\346\270\270/index.html" "b/tags/\346\227\205\346\270\270/index.html" index 0293bb5fc..da6e48298 100644 --- "a/tags/\346\227\205\346\270\270/index.html" +++ "b/tags/\346\227\205\346\270\270/index.html" @@ -1 +1 @@ -标签: 旅游 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: 旅游 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git "a/tags/\347\233\221\346\216\247/index.html" "b/tags/\347\233\221\346\216\247/index.html" index d53e1ca7a..a14c72e7c 100644 --- "a/tags/\347\233\221\346\216\247/index.html" +++ "b/tags/\347\233\221\346\216\247/index.html" @@ -1 +1 @@ -标签: 监控 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +标签: 监控 | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      文章统计

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file diff --git "a/\346\265\213\350\257\225\351\241\265\351\235\242/index.html" "b/\346\265\213\350\257\225\351\241\265\351\235\242/index.html" index c740f0873..7b1e22b50 100644 --- "a/\346\265\213\350\257\225\351\241\265\351\235\242/index.html" +++ "b/\346\265\213\350\257\225\351\241\265\351\235\242/index.html" @@ -1 +1 @@ -GGLSS | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file +GGLSS | GGLSS
                                                      控制面板×

                                                      性能设置

                                                      禁用模糊效果
                                                      开启帧率检测(刷新后生效)

                                                      主题设置

                                                      显示aplayer
                                                      落樱特效
                                                      明暗模式自动切换
                                                      自动主题色(跟随文章封面)
                                                      未完工
                                                      固定导航栏
                                                      ###

                                                      主题色

                                                      背景设置

                                                      注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

                                                      图片(手机)

                                                      图片(电脑)

                                                      渐变色

                                                      纯色

                                                      文章统计

                                                      监控

                                                      访问统计显示不出来请刷新页面

                                                      关于

                                                      Hexo-theme-Acryple v1.0.100
                                                      Ariasaka Console v0.01
                                                      欢迎反馈!
                                                      🍭查看新品🍬
                                                      \ No newline at end of file