diff --git a/2/index.html b/2/index.html index f2d5a33..3811bbc 100644 --- a/2/index.html +++ b/2/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
从memos的webhook开始
2024-06-18
这篇文章介绍了如何利用memos的webhook功能从v0.18版本开始,通过复制Typecho主题icefox的CSS布局,创建一个基于memos的单页面,类微信朋友圈。文章详细说明了使用BASH、宝塔WEBHOOK和PHP获取memos的JSON数据的方法,并展示了如何部署webhook镜像和配置webhook以实现自动更新memos.json文件。此外,还提供了演示链接供参考。
779 字
|
4 分钟
利用 Github Actions 自动部署 Hexo 博客
这篇文章介绍了如何使用Github Actions实现CI/CD工作流,包括自动化测试、打包和部署等操作。文章详细说明了在已有hexo博客、github账户和项目的基础上,如何创建.github/workflows/main.yml文件,并设置Personal access tokens以实现hexo项目main分支更新时自动更新gh-pages分支的功能。
331 字
|
2 分钟
在fly.io部署Alist
2024-01-27
这篇文章介绍了如何在Windows系统上安装FLYCTL工具,并详细说明了初始化、创建应用、设置参数、编辑配置文件、部署应用以及获取管理员密码的步骤。文章通过图文结合的方式,展示了每一步的操作流程,并提供了一个演示链接以供参考。
188 字
|
1 分钟
使用Docker快速部署mastodon实例
2023-10-30
这篇文章介绍了如何使用Docker快速部署Mastodon实例的详细步骤,包括创建目录、拉取镜像、修改Docker Compose配置文件、初始化PostgreSQL数据库、配置Mastodon、运行引导、写入配置文件、启动Mastodon、文件夹赋权和创建管理员账户等。
272 字
|
1 分钟
快速部署misskey实例
2023-10-11
这篇文章介绍了如何在纯净的Ubuntu系统上使用一键脚本安装和更新Misskey,推荐配置为双核心四线程。文章详细说明了更新脚本的步骤,以及如何使用Docker Compose进行部署,包括环境准备、Git克隆仓库、编辑配置文件、构建镜像、启动容器和设置反向代理的步骤。
308 字
|
2 分钟
Mariadb创建数据库、用户及授权
2023-10-06
这篇文章介绍了在测试SForum程序中涉及的数据库操作流程,包括安装MARIADB服务器、初始化数据库、连接数据库、创建数据库和本地访问账户、创建用户并设置参数(如用户名、访问方式和密码)、分配权限(包括所有权限和部分权限)以及授权操作权限。
245 字
|
1 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06
这篇文章介绍了如何将XiunoBBS数据转换为SForum的过程,使用的是SForum v2.2.2版本。文章详细描述了测试环境配置,包括Ubuntu 22.0.4、PHP8.0、MariaDB10.6、Composer、Redis和Nginx或Apache的安装与配置。此外,还涉及了PHP扩展ZIPARCHIVE的安装问题解决,以及通过Composer安装Medoo类库,创建和导入MariaDB数据库,安装Redis和Nginx,最后完成SForum v2.2.2的安装步骤。
392 字
|
2 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05
这篇文章介绍了两个关于Yum使用中的问题及其解决方法。第一个问题是yum makecache时卡在Determining fastest mirrors,解决方法是禁用fastestmirror插件,通过修改/etc/yum/pluginconf.d/fastestmirror.conf和/etc/yum.conf文件实现。第二个问题是无法访问ELRepo镜像列表,解决方法是更新ELRepo软件仓库镜像,通过替换/etc/yum.repos.d/elrepo.repo文件中的mirrorlist地址来实现。
183 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
从memos的webhook开始
2024-06-18
这篇文章介绍了如何利用memos的webhook功能从v0.18版本开始,通过复制Typecho主题icefox的CSS布局,创建一个基于memos的单页面,类微信朋友圈。文章详细说明了使用BASH、宝塔WEBHOOK和PHP获取memos的JSON数据的方法,并展示了如何部署webhook镜像和配置webhook以实现自动更新memos.json文件。此外,还提供了演示链接供参考。
779 字
|
4 分钟
利用 Github Actions 自动部署 Hexo 博客
这篇文章介绍了如何使用Github Actions实现CI/CD工作流,包括自动化测试、打包和部署等操作。文章详细说明了在已有hexo博客、github账户和项目的基础上,如何创建.github/workflows/main.yml文件,并设置Personal access tokens以实现hexo项目main分支更新时自动更新gh-pages分支的功能。
331 字
|
2 分钟
在fly.io部署Alist
2024-01-27
这篇文章介绍了如何在Windows系统上安装FLYCTL工具,并详细说明了初始化、创建应用、设置参数、编辑配置文件、部署应用以及获取管理员密码的步骤。文章通过图文结合的方式,展示了每一步的操作流程,并提供了一个演示链接以供参考。
188 字
|
1 分钟
使用Docker快速部署mastodon实例
2023-10-30
这篇文章介绍了如何使用Docker快速部署Mastodon实例的详细步骤,包括创建目录、拉取镜像、修改Docker Compose配置文件、初始化PostgreSQL数据库、配置Mastodon、运行引导、写入配置文件、启动Mastodon、文件夹赋权和创建管理员账户等。
272 字
|
1 分钟
快速部署misskey实例
2023-10-11
这篇文章介绍了如何在纯净的Ubuntu系统上使用一键脚本安装和更新Misskey,推荐配置为双核心四线程。文章详细说明了更新脚本的步骤,以及如何使用Docker Compose进行部署,包括环境准备、Git克隆仓库、编辑配置文件、构建镜像、启动容器和设置反向代理的步骤。
308 字
|
2 分钟
Mariadb创建数据库、用户及授权
2023-10-06
这篇文章介绍了在测试SForum程序中涉及的数据库操作流程,包括安装MARIADB服务器、初始化数据库、连接数据库、创建数据库和本地访问账户、创建用户并设置参数(如用户名、访问方式和密码)、分配权限(包括所有权限和部分权限)以及授权操作权限。
245 字
|
1 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06
这篇文章介绍了如何将XiunoBBS数据转换为SForum的过程,使用的是SForum v2.2.2版本。文章详细描述了测试环境配置,包括Ubuntu 22.0.4、PHP8.0、MariaDB10.6、Composer、Redis和Nginx或Apache的安装与配置。此外,还涉及了PHP扩展ZIPARCHIVE的安装问题解决,以及通过Composer安装Medoo类库,创建和导入MariaDB数据库,安装Redis和Nginx,最后完成SForum v2.2.2的安装步骤。
392 字
|
2 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05
这篇文章介绍了两个关于Yum使用中的问题及其解决方法。第一个问题是yum makecache时卡在Determining fastest mirrors,解决方法是禁用fastestmirror插件,通过修改/etc/yum/pluginconf.d/fastestmirror.conf和/etc/yum.conf文件实现。第二个问题是无法访问ELRepo镜像列表,解决方法是更新ELRepo软件仓库镜像,通过替换/etc/yum.repos.d/elrepo.repo文件中的mirrorlist地址来实现。
183 字
|
1 分钟
\ No newline at end of file diff --git a/3/index.html b/3/index.html index 4702e34..0449317 100644 --- a/3/index.html +++ b/3/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
Docker部署Activity-Relay服务
2023-10-03
这篇文章介绍了在CentOS 7.9环境下部署一个项目的过程,包括安装必要的软件(如git、openssl、nginx、docker和docker-compose),从仓库拉取代码,编辑配置文件,生成RSA证书,构建并运行Docker镜像,查看容器状态,以及停止服务的步骤。同时还提到了Ubuntu和CentOS在生成证书时的不同命令,以及权限设置和Nginx配置的相关参考。
250 字
|
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01
这篇文章介绍了如何在NEC M700笔记本上安装黑苹果,使用OpenCore 0.9.4引导。文章详细列出了笔记本的硬件配置,包括CPU、主板、内存、硬盘、无线网卡、有线网卡和声卡。此外,还提到了安装前的准备工作,如使用U盘、解锁CFG LOCK工具、ami BIOS提取工具和OCAT。具体步骤包括在Windows系统下提取BIOS文件,并通过UEFI TOOL打开并查找cfg lock项。
106 字
|
1 分钟
在fly.io部署Gotosocial
这篇文章介绍了如何安装和配置GoToSocial,一个轻量级的ActivityPub联邦社交网络程序。文章详细说明了注册Fly.io和Cloudflare账户的步骤,安装FLYCTL的方法,以及如何在不同操作系统上进行操作。此外,还涵盖了创建应用、储存卷、编辑配置文件、部署应用、创建用户和管理员账户的具体步骤,并提供了演示链接和下载数据库的方法。
490 字
|
2 分钟
在fly.io部署artalk评论系统
2023-08-15
这篇文章介绍了如何在Fly.io平台上使用其提供的免费服务,包括安装flyctl命令行工具、创建应用、分配1G硬盘空间以及编辑FLY.TOML文件来设置管理员账号和重启服务的步骤。Fly.io提供三个256MB内存的服务器和总3G硬盘空间,但需要绑定信用卡以防止滥用。
191 字
|
1 分钟
如何在Fly.io部署Memos
2023-08-15
这篇文章介绍了如何在FLY.IO上部署memos应用,并使用Backblaze B2云存储进行数据库备份。文章详细说明了注册FLY.IO和Backblaze B2的步骤,安装flyctl工具,创建和配置FLY.TOML文件,添加持久卷和密钥,最后进行应用部署。此外,还提供了演示地址和绑定域名的示例。
263 字
|
1 分钟
使用 Docker 构建 Pleroma 实例
这篇文章介绍了如何使用Docker构建Pleroma实例,Pleroma是一个基于ActivityPub协议的去中心化社区程序。文章详细说明了在宝塔面板中安装Docker、获取DOCKER-COMPOSE.YML模板、修改配置文件、启动容器、添加反向代理、创建管理员账户以及修改文件夹权限的步骤。此外,还提到了如果使用S3协议的对象存储则无需修改文件夹权限,并提供了一个演示地址。
459 字
|
2 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13
这篇文章介绍了如何修改Memos/index.md文件的内容,并提到代码来源于网络。
121 字
|
1 分钟
2023国内注册ChatGPT的方法
这篇文章介绍了国内用户如何注册和使用ChatGPT的方法。首先,用户需要有一个非中国大陆的网络环境和一个可以接收短信验证码的手机号码。接着,通过OpenAI官网进行账号注册,包括邮箱验证和手机号码验证。文章还提到了如果无法直接注册,可以通过搭建梯子或使用第三方接码平台来解决。最后,注册完成后,用户可以登录ChatGPT官网开始使用。
1192 字
|
6 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
Docker部署Activity-Relay服务
2023-10-03
这篇文章介绍了在CentOS 7.9环境下部署一个项目的过程,包括安装必要的软件(如git、openssl、nginx、docker和docker-compose),从仓库拉取代码,编辑配置文件,生成RSA证书,构建并运行Docker镜像,查看容器状态,以及停止服务的步骤。同时还提到了Ubuntu和CentOS在生成证书时的不同命令,以及权限设置和Nginx配置的相关参考。
250 字
|
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01
这篇文章介绍了如何在NEC M700笔记本上安装黑苹果,使用OpenCore 0.9.4引导。文章详细列出了笔记本的硬件配置,包括CPU、主板、内存、硬盘、无线网卡、有线网卡和声卡。此外,还提到了安装前的准备工作,如使用U盘、解锁CFG LOCK工具、ami BIOS提取工具和OCAT。具体步骤包括在Windows系统下提取BIOS文件,并通过UEFI TOOL打开并查找cfg lock项。
106 字
|
1 分钟
在fly.io部署Gotosocial
这篇文章介绍了如何安装和配置GoToSocial,一个轻量级的ActivityPub联邦社交网络程序。文章详细说明了注册Fly.io和Cloudflare账户的步骤,安装FLYCTL的方法,以及如何在不同操作系统上进行操作。此外,还涵盖了创建应用、储存卷、编辑配置文件、部署应用、创建用户和管理员账户的具体步骤,并提供了演示链接和下载数据库的方法。
490 字
|
2 分钟
在fly.io部署artalk评论系统
2023-08-15
这篇文章介绍了如何在Fly.io平台上使用其提供的免费服务,包括安装flyctl命令行工具、创建应用、分配1G硬盘空间以及编辑FLY.TOML文件来设置管理员账号和重启服务的步骤。Fly.io提供三个256MB内存的服务器和总3G硬盘空间,但需要绑定信用卡以防止滥用。
191 字
|
1 分钟
如何在Fly.io部署Memos
2023-08-15
这篇文章介绍了如何在FLY.IO上部署memos应用,并使用Backblaze B2云存储进行数据库备份。文章详细说明了注册FLY.IO和Backblaze B2的步骤,安装flyctl工具,创建和配置FLY.TOML文件,添加持久卷和密钥,最后进行应用部署。此外,还提供了演示地址和绑定域名的示例。
263 字
|
1 分钟
使用 Docker 构建 Pleroma 实例
这篇文章介绍了如何使用Docker构建Pleroma实例,Pleroma是一个基于ActivityPub协议的去中心化社区程序。文章详细说明了在宝塔面板中安装Docker、获取DOCKER-COMPOSE.YML模板、修改配置文件、启动容器、添加反向代理、创建管理员账户以及修改文件夹权限的步骤。此外,还提到了如果使用S3协议的对象存储则无需修改文件夹权限,并提供了一个演示地址。
459 字
|
2 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13
这篇文章介绍了如何修改Memos/index.md文件的内容,并提到代码来源于网络。
121 字
|
1 分钟
2023国内注册ChatGPT的方法
这篇文章介绍了国内用户如何注册和使用ChatGPT的方法。首先,用户需要有一个非中国大陆的网络环境和一个可以接收短信验证码的手机号码。接着,通过OpenAI官网进行账号注册,包括邮箱验证和手机号码验证。文章还提到了如果无法直接注册,可以通过搭建梯子或使用第三方接码平台来解决。最后,注册完成后,用户可以登录ChatGPT官网开始使用。
1192 字
|
6 分钟
\ No newline at end of file diff --git a/4/index.html b/4/index.html index 40fd76e..be49eb6 100644 --- a/4/index.html +++ b/4/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
Qv2ray客户端及内核下载
2023-04-07
这篇文章介绍了Qv2ray,一个第三方图形化桌面客户端,基于V2ray官方内核,支持多种代理协议如vmess、SS、SSR、Trojan等,并可通过插件扩展功能。文章还提供了Qv2ray客户端和V2ray内核的下载链接。
154 字
|
1 分钟
42个虚拟信用卡开卡渠道
这篇文章介绍了如何通过调整饮食习惯来改善睡眠质量。文章首先指出睡眠问题在现代社会中的普遍性,然后详细讨论了食物对睡眠的影响,包括哪些食物有助于促进睡眠,如富含色氨酸的食物和全谷物,以及应避免的食物,如含咖啡因和糖分高的食品。此外,文章还提到了饮食时间的重要性,建议晚餐不宜过晚或过饱。整体上,文章提供了实用的饮食建议,帮助读者通过调整饮食来获得更好的睡眠。
1871 字
|
9 分钟
centos7安装后没有网络
2022-11-29
这篇文章介绍了如何以root账号登录系统,使用ip addr命令查看网络参数,并打开eth0网卡的配置文件。文章还指导了如何将NOBOOT参数从no修改为yes,以及通过重启网络或服务器来应用这些更改。
51 字
|
1 分钟
macOS与Windows双系统时间不同步的解决办法
2022-11-15
这篇文章介绍了在Windows系统中,通过右键点击开始菜单并选择“终端(管理员)”来执行某些操作的方法,并建议重启电脑以应用更改。
35 字
|
1 分钟
VK23黑苹果OpenCore0.8.5引导macOS12.6.1
2022-11-08
这篇文章介绍了将网卡更换为DW1560的过程,并提供了相关的截图链接。文章还列出了更换网卡后设备正常工作的各项功能,包括显卡、声卡、有线网卡、无线网卡、摄像头、读卡器、蓝牙和隔空投送。
53 字
|
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
这篇文章介绍了作者的电脑配置,包括CPU、主板、内存、硬盘、显卡、网卡、电源和机箱等硬件信息。文章还提到了机箱的散热问题,以及通过BIOS设置优化系统性能的具体步骤,如关闭CSM兼容性、VT-D等。此外,文章还分享了已成功驱动的硬件列表,如声卡、网卡、显卡等,并提供了引导下载的链接。
133 字
|
1 分钟
office2016 Mac 版本下载安装及破解激活
2022-10-14
这篇文章提供了Microsoft Office 2016 for Mac的安装包下载地址和一个激活工具的百度网盘链接及密码。安装包地址为http://officecdn.microsoft.com/sg/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/Microsoft_Office_2016_15.29.16120900_Installer.pkg,激活工具链接为https://pan.baidu.com/s/1ragcr1M,密码是rcb2。
22 字
|
1 分钟
Typecho插件CommentsByQQ修改版
这篇文章介绍了作者基于Typecho插件CommentsByQQ的修改版本,旨在通过QQ机器人接收评论通知。由于原插件的QQ机器人已失效,作者自行搭建了一个基于go-http的QQ机器人,并提供了使用方法和下载地址。
113 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
Qv2ray客户端及内核下载
2023-04-07
这篇文章介绍了Qv2ray,一个第三方图形化桌面客户端,基于V2ray官方内核,支持多种代理协议如vmess、SS、SSR、Trojan等,并可通过插件扩展功能。文章还提供了Qv2ray客户端和V2ray内核的下载链接。
154 字
|
1 分钟
42个虚拟信用卡开卡渠道
这篇文章介绍了如何通过调整饮食习惯来改善睡眠质量。文章首先指出睡眠问题在现代社会中的普遍性,然后详细讨论了食物对睡眠的影响,包括哪些食物有助于促进睡眠,如富含色氨酸的食物和全谷物,以及应避免的食物,如含咖啡因和糖分高的食品。此外,文章还提到了饮食时间的重要性,建议晚餐不宜过晚或过饱。整体上,文章提供了实用的饮食建议,帮助读者通过调整饮食来获得更好的睡眠。
1871 字
|
9 分钟
centos7安装后没有网络
2022-11-29
这篇文章介绍了如何以root账号登录系统,使用ip addr命令查看网络参数,并打开eth0网卡的配置文件。文章还指导了如何将NOBOOT参数从no修改为yes,以及通过重启网络或服务器来应用这些更改。
51 字
|
1 分钟
macOS与Windows双系统时间不同步的解决办法
2022-11-15
这篇文章介绍了在Windows系统中,通过右键点击开始菜单并选择“终端(管理员)”来执行某些操作的方法,并建议重启电脑以应用更改。
35 字
|
1 分钟
VK23黑苹果OpenCore0.8.5引导macOS12.6.1
2022-11-08
这篇文章介绍了将网卡更换为DW1560的过程,并提供了相关的截图链接。文章还列出了更换网卡后设备正常工作的各项功能,包括显卡、声卡、有线网卡、无线网卡、摄像头、读卡器、蓝牙和隔空投送。
53 字
|
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
这篇文章介绍了作者的电脑配置,包括CPU、主板、内存、硬盘、显卡、网卡、电源和机箱等硬件信息。文章还提到了机箱的散热问题,以及通过BIOS设置优化系统性能的具体步骤,如关闭CSM兼容性、VT-D等。此外,文章还分享了已成功驱动的硬件列表,如声卡、网卡、显卡等,并提供了引导下载的链接。
133 字
|
1 分钟
office2016 Mac 版本下载安装及破解激活
2022-10-14
这篇文章提供了Microsoft Office 2016 for Mac的安装包下载地址和一个激活工具的百度网盘链接及密码。安装包地址为http://officecdn.microsoft.com/sg/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/Microsoft_Office_2016_15.29.16120900_Installer.pkg,激活工具链接为https://pan.baidu.com/s/1ragcr1M,密码是rcb2。
22 字
|
1 分钟
Typecho插件CommentsByQQ修改版
这篇文章介绍了作者基于Typecho插件CommentsByQQ的修改版本,旨在通过QQ机器人接收评论通知。由于原插件的QQ机器人已失效,作者自行搭建了一个基于go-http的QQ机器人,并提供了使用方法和下载地址。
113 字
|
1 分钟
\ No newline at end of file diff --git a/5/index.html b/5/index.html index 30aa6d3..9bfa9fa 100644 --- a/5/index.html +++ b/5/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
centos7 ssh连接慢的解决方法
2022-08-12
这篇文章介绍了在Linux系统中修改SSH配置文件的步骤,包括取消注释并修改UseDNS选项为no,以及将GSSAPIAuthentication选项也改为no,最后保存并退出编辑器,重启系统以应用更改。
35 字
|
1 分钟
Linux下本地安装包命令
2022-07-27
这篇文章介绍了在CENTOS系统下如何安装RPM安装包,以及在UBUNTU系统下如何安装DEB安装包。文章可能详细说明了安装步骤和命令,帮助用户在不同Linux发行版上进行软件包的安装。
28 字
|
1 分钟
黑苹果固态避坑指南
这篇文章介绍了多个型号的固态硬盘(SSD)与macOS的兼容性问题,包括三星、镁光、爱国者等品牌的特定型号在安装和运行macOS时可能遇到的问题。文章还提到了一些型号需要升级固件或使用特定的kext文件来解决兼容性问题,以及关于TRIM支持的详细信息,包括哪些型号完全支持或不完全支持TRIM功能。此外,文章还列出了一些能够正常安装和运行macOS的SSD型号。
636 字
|
3 分钟
2023年黑苹果amd免驱显卡购买推荐
这篇文章介绍了不同系列的AMD显卡及其在各个macOS版本中的支持情况。包括NAVI 20系列、NAVI 10系列、VEGA 20系列、VEGA 10系列、Polaris架构系列、R7/R9系列、HD 8000系列和HD 7000系列显卡,以及它们在特定操作系统版本下的兼容性和可能需要的特殊启动参数。
332 字
|
2 分钟
NEC VK22 黑苹果opencore引导
这篇文章介绍了如何在安装黑苹果前解锁CFGLock,以及使用NVME固态硬盘的优化方法。通过将U盘格式化为FAT32并复制OC引导文件,设置U盘为第一启动项,可以提升读写速度且不需修改BIOS。文章还提到了笔记本黑苹果安装中的难点,如注入EDID,并分享了已驱动的硬件列表和EFI文件下载链接。
192 字
|
1 分钟
记一次亿储SSD固态掉盘修复(重新开卡)
这篇文章介绍了老孙在闲鱼购买了一块二手SSD并尝试安装黑苹果系统,但遇到硬盘识别问题。通过拆解硬盘、短接主控、使用开卡软件等步骤,最终成功修复了固态硬盘的问题。文章还提供了所需物料清单、操作步骤和相关教程链接。
378 字
|
2 分钟
Cloud Torrent for centos一键安装
这篇文章介绍了如何安装和使用Cloud Torrent,一个支持BT和磁力链接下载、离线下载及边下边播的工具。文章详细说明了系统需求、脚本版本、特点、安装步骤、使用说明以及注意事项。Cloud Torrent通过Web UI提供可视化界面,支持搜索磁力链接,但主要针对国外资源。文章还提到了使用该工具时可能遇到的网络问题和版权风险。
863 字
|
4 分钟
Vi编辑器的基本使用方法
2016-11-16
这篇文章介绍了如何通过优化网站内容和结构来提高搜索引擎排名,包括关键词研究、内容创作、内部链接策略和外部链接建设等方法。文章还提到了SEO工具的使用和持续监控网站表现的重要性,以确保长期的成功。
2295 字
|
11 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
centos7 ssh连接慢的解决方法
2022-08-12
这篇文章介绍了在Linux系统中修改SSH配置文件的步骤,包括取消注释并修改UseDNS选项为no,以及将GSSAPIAuthentication选项也改为no,最后保存并退出编辑器,重启系统以应用更改。
35 字
|
1 分钟
Linux下本地安装包命令
2022-07-27
这篇文章介绍了在CENTOS系统下如何安装RPM安装包,以及在UBUNTU系统下如何安装DEB安装包。文章可能详细说明了安装步骤和命令,帮助用户在不同Linux发行版上进行软件包的安装。
28 字
|
1 分钟
黑苹果固态避坑指南
这篇文章介绍了多个型号的固态硬盘(SSD)与macOS的兼容性问题,包括三星、镁光、爱国者等品牌的特定型号在安装和运行macOS时可能遇到的问题。文章还提到了一些型号需要升级固件或使用特定的kext文件来解决兼容性问题,以及关于TRIM支持的详细信息,包括哪些型号完全支持或不完全支持TRIM功能。此外,文章还列出了一些能够正常安装和运行macOS的SSD型号。
636 字
|
3 分钟
2023年黑苹果amd免驱显卡购买推荐
这篇文章介绍了不同系列的AMD显卡及其在各个macOS版本中的支持情况。包括NAVI 20系列、NAVI 10系列、VEGA 20系列、VEGA 10系列、Polaris架构系列、R7/R9系列、HD 8000系列和HD 7000系列显卡,以及它们在特定操作系统版本下的兼容性和可能需要的特殊启动参数。
332 字
|
2 分钟
NEC VK22 黑苹果opencore引导
这篇文章介绍了如何在安装黑苹果前解锁CFGLock,以及使用NVME固态硬盘的优化方法。通过将U盘格式化为FAT32并复制OC引导文件,设置U盘为第一启动项,可以提升读写速度且不需修改BIOS。文章还提到了笔记本黑苹果安装中的难点,如注入EDID,并分享了已驱动的硬件列表和EFI文件下载链接。
192 字
|
1 分钟
记一次亿储SSD固态掉盘修复(重新开卡)
这篇文章介绍了老孙在闲鱼购买了一块二手SSD并尝试安装黑苹果系统,但遇到硬盘识别问题。通过拆解硬盘、短接主控、使用开卡软件等步骤,最终成功修复了固态硬盘的问题。文章还提供了所需物料清单、操作步骤和相关教程链接。
378 字
|
2 分钟
Cloud Torrent for centos一键安装
这篇文章介绍了如何安装和使用Cloud Torrent,一个支持BT和磁力链接下载、离线下载及边下边播的工具。文章详细说明了系统需求、脚本版本、特点、安装步骤、使用说明以及注意事项。Cloud Torrent通过Web UI提供可视化界面,支持搜索磁力链接,但主要针对国外资源。文章还提到了使用该工具时可能遇到的网络问题和版权风险。
863 字
|
4 分钟
Vi编辑器的基本使用方法
2016-11-16
这篇文章介绍了如何通过优化网站内容和结构来提高搜索引擎排名,包括关键词研究、内容创作、内部链接策略和外部链接建设等方法。文章还提到了SEO工具的使用和持续监控网站表现的重要性,以确保长期的成功。
2295 字
|
11 分钟
\ No newline at end of file diff --git a/6/index.html b/6/index.html index 4d6de0e..8e367d3 100644 --- a/6/index.html +++ b/6/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
阿里悟空服务下线
这篇文章介绍了阿里悟空服务在2016年10月31日下线的情况,以及基于该服务的phpwind移动版也随之结束。文章提到phpwind和discuz这两大社区论坛程序已经停止更新维护,暗示了社区论坛可能的衰落趋势。同时,文章探讨了个人草根站长未来可能不复存在的可能性,主要是因为网站开发和维护成本对非IT人员来说过高。
188 字
|
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14
这篇文章介绍了如何在CentOS系统中修改时间和时区。首先,文章说明了如何查看当前系统时间,并提供了具体的命令来设置新的日期和时间(例如,将日期设定为2013年3月4日,时间设定为上午10:38)。接着,文章讲解了如何查看和修改系统的时区,特别是如何将时区设置为亚洲/上海,并确认覆盖操作。最后,文章指导用户如何验证新的时区和时间设置是否正确。
120 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
阿里悟空服务下线
这篇文章介绍了阿里悟空服务在2016年10月31日下线的情况,以及基于该服务的phpwind移动版也随之结束。文章提到phpwind和discuz这两大社区论坛程序已经停止更新维护,暗示了社区论坛可能的衰落趋势。同时,文章探讨了个人草根站长未来可能不复存在的可能性,主要是因为网站开发和维护成本对非IT人员来说过高。
188 字
|
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14
这篇文章介绍了如何在CentOS系统中修改时间和时区。首先,文章说明了如何查看当前系统时间,并提供了具体的命令来设置新的日期和时间(例如,将日期设定为2013年3月4日,时间设定为上午10:38)。接着,文章讲解了如何查看和修改系统的时区,特别是如何将时区设置为亚洲/上海,并确认覆盖操作。最后,文章指导用户如何验证新的时区和时间设置是否正确。
120 字
|
1 分钟
\ No newline at end of file diff --git a/_astro/hoisted.Cf5ypQJG.js b/_astro/hoisted.Cf5ypQJG.js new file mode 100644 index 0000000..5f57cba --- /dev/null +++ b/_astro/hoisted.Cf5ypQJG.js @@ -0,0 +1 @@ +import{_ as Jn}from"./preload-helper.BiBI96sQ.js";import{b as Qn,c as to,s as eo,g as so}from"./setting-utils.H_x_02w0.js";import{p as no,u as oo}from"./url-utils.Co0GbPFH.js";import"./zh_TW.Cn8XYgkS.js";const je=new MutationObserver(Js);function Js(){je.disconnect();let t=Array.from(document.querySelectorAll("pre"));for(let e of t){if("DIV"===e.parentElement?.nodeName&&e.parentElement?.classList.contains("code-block"))continue;let t=document.createElement("div");t.className="relative code-block";let n=document.createElement("button");n.className="copy-btn btn-regular-dark absolute active:scale-90 h-8 w-8 top-2 right-2 opacity-75 text-sm p-1.5 rounded-lg transition-all ease-in-out",e.setAttribute("tabindex","0"),e.parentNode&&e.parentNode.insertBefore(t,e);let s,i='',o='';n.innerHTML=`
${i} ${o}
\n `,t.appendChild(e),t.appendChild(n),n.addEventListener("click",(async()=>{s&&clearTimeout(s);let t=e?.querySelector("code")?.innerText;void 0!==t&&(await navigator.clipboard.writeText(t),n.classList.add("success"),s=setTimeout((()=>{n.classList.remove("success")}),1e3))}))}je.observe(document.body,{childList:!0,subtree:!0})}function Jt(t,e,n){const s=document.createElement(e);return t&&(s.className=t),n&&n.appendChild(s),s}function io(t,e,n){let s=`translate3d(${t}px,0px,0)`;return void 0!==n&&(s+=` scale3d(${n},${n},1)`),s}function Ke(t,e,n){t.style.width="number"==typeof e?`${e}px`:e,t.style.height="number"==typeof n?`${n}px`:n}je.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",Js);const vt={IDLE:"idle",LOADING:"loading",LOADED:"loaded",ERROR:"error"};function co(t){return"button"in t&&1===t.button||t.ctrlKey||t.metaKey||t.altKey||t.shiftKey}function Qt(t,e,n=document){let s=[];if(t instanceof Element)s=[t];else if(t instanceof NodeList||Array.isArray(t))s=Array.from(t);else{const i="string"==typeof t?t:e;i&&(s=Array.from(n.querySelectorAll(i)))}return s}function ro(t){return"function"==typeof t&&t.prototype&&t.prototype.goTo}function Is(){return!(!navigator.vendor||!navigator.vendor.match(/apple/i))}class lo{constructor(t,e){this.type=t,this.defaultPrevented=!1,e&&Object.assign(this,e)}preventDefault(){this.defaultPrevented=!0}}class ao{constructor(){this._listeners={},this._filters={},this.pswp=void 0,this.options=void 0}addFilter(t,e,n=100){var s,i,o;this._filters[t]||(this._filters[t]=[]),null===(s=this._filters[t])||void 0===s||s.push({fn:e,priority:n}),null===(i=this._filters[t])||void 0===i||i.sort(((t,e)=>t.priority-e.priority)),null===(o=this.pswp)||void 0===o||o.addFilter(t,e,n)}removeFilter(t,e){this._filters[t]&&(this._filters[t]=this._filters[t].filter((t=>t.fn!==e))),this.pswp&&this.pswp.removeFilter(t,e)}applyFilters(t,...e){var n;return null===(n=this._filters[t])||void 0===n||n.forEach((t=>{e[0]=t.fn.apply(this,e)})),e[0]}on(t,e){var n,s;this._listeners[t]||(this._listeners[t]=[]),null===(n=this._listeners[t])||void 0===n||n.push(e),null===(s=this.pswp)||void 0===s||s.on(t,e)}off(t,e){var n;this._listeners[t]&&(this._listeners[t]=this._listeners[t].filter((t=>e!==t))),null===(n=this.pswp)||void 0===n||n.off(t,e)}dispatch(t,e){var n;if(this.pswp)return this.pswp.dispatch(t,e);const s=new lo(t,e);return null===(n=this._listeners[t])||void 0===n||n.forEach((t=>{t.call(this,s)})),s}}class ho{constructor(t,e){if(this.element=Jt("pswp__img pswp__img--placeholder",t?"img":"div",e),t){const e=this.element;e.decoding="async",e.alt="",e.src=t,e.setAttribute("role","presentation")}this.element.setAttribute("aria-hidden","true")}setDisplayedSize(t,e){this.element&&("IMG"===this.element.tagName?(Ke(this.element,250,"auto"),this.element.style.transformOrigin="0 0",this.element.style.transform=io(0,0,t/250)):Ke(this.element,t,e))}destroy(){var t;null!==(t=this.element)&&void 0!==t&&t.parentNode&&this.element.remove(),this.element=null}}class uo{constructor(t,e,n){this.instance=e,this.data=t,this.index=n,this.element=void 0,this.placeholder=void 0,this.slide=void 0,this.displayedImageWidth=0,this.displayedImageHeight=0,this.width=Number(this.data.w)||Number(this.data.width)||0,this.height=Number(this.data.h)||Number(this.data.height)||0,this.isAttached=!1,this.hasSlide=!1,this.isDecoding=!1,this.state=vt.IDLE,this.data.type?this.type=this.data.type:this.data.src?this.type="image":this.type="html",this.instance.dispatch("contentInit",{content:this})}removePlaceholder(){this.placeholder&&!this.keepPlaceholder()&&setTimeout((()=>{this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0)}),1e3)}load(t,e){if(this.slide&&this.usePlaceholder())if(this.placeholder){const t=this.placeholder.element;t&&!t.parentElement&&this.slide.container.prepend(t)}else{const t=this.instance.applyFilters("placeholderSrc",!(!this.data.msrc||!this.slide.isFirstSlide)&&this.data.msrc,this);this.placeholder=new ho(t,this.slide.container)}this.element&&!e||this.instance.dispatch("contentLoad",{content:this,isLazy:t}).defaultPrevented||(this.isImageContent()?(this.element=Jt("pswp__img","img"),this.displayedImageWidth&&this.loadImage(t)):(this.element=Jt("pswp__content","div"),this.element.innerHTML=this.data.html||""),e&&this.slide&&this.slide.updateContentSize(!0))}loadImage(t){var e,n;if(!this.isImageContent()||!this.element||this.instance.dispatch("contentLoadImage",{content:this,isLazy:t}).defaultPrevented)return;const s=this.element;this.updateSrcsetSizes(),this.data.srcset&&(s.srcset=this.data.srcset),s.src=null!==(e=this.data.src)&&void 0!==e?e:"",s.alt=null!==(n=this.data.alt)&&void 0!==n?n:"",this.state=vt.LOADING,s.complete?this.onLoaded():(s.onload=()=>{this.onLoaded()},s.onerror=()=>{this.onError()})}setSlide(t){this.slide=t,this.hasSlide=!0,this.instance=t.pswp}onLoaded(){this.state=vt.LOADED,this.slide&&this.element&&(this.instance.dispatch("loadComplete",{slide:this.slide,content:this}),this.slide.isActive&&this.slide.heavyAppended&&!this.element.parentNode&&(this.append(),this.slide.updateContentSize(!0)),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder())}onError(){this.state=vt.ERROR,this.slide&&(this.displayError(),this.instance.dispatch("loadComplete",{slide:this.slide,isError:!0,content:this}),this.instance.dispatch("loadError",{slide:this.slide,content:this}))}isLoading(){return this.instance.applyFilters("isContentLoading",this.state===vt.LOADING,this)}isError(){return this.state===vt.ERROR}isImageContent(){return"image"===this.type}setDisplayedSize(t,e){if(this.element&&(this.placeholder&&this.placeholder.setDisplayedSize(t,e),!this.instance.dispatch("contentResize",{content:this,width:t,height:e}).defaultPrevented&&(Ke(this.element,t,e),this.isImageContent()&&!this.isError()))){const n=!this.displayedImageWidth&&t;this.displayedImageWidth=t,this.displayedImageHeight=e,n?this.loadImage(!1):this.updateSrcsetSizes(),this.slide&&this.instance.dispatch("imageSizeChange",{slide:this.slide,width:t,height:e,content:this})}}isZoomable(){return this.instance.applyFilters("isContentZoomable",this.isImageContent()&&this.state!==vt.ERROR,this)}updateSrcsetSizes(){if(!this.isImageContent()||!this.element||!this.data.srcset)return;const t=this.element,e=this.instance.applyFilters("srcsetSizesWidth",this.displayedImageWidth,this);(!t.dataset.largestUsedSize||e>parseInt(t.dataset.largestUsedSize,10))&&(t.sizes=e+"px",t.dataset.largestUsedSize=String(e))}usePlaceholder(){return this.instance.applyFilters("useContentPlaceholder",this.isImageContent(),this)}lazyLoad(){this.instance.dispatch("contentLazyLoad",{content:this}).defaultPrevented||this.load(!0)}keepPlaceholder(){return this.instance.applyFilters("isKeepingPlaceholder",this.isLoading(),this)}destroy(){this.hasSlide=!1,this.slide=void 0,!this.instance.dispatch("contentDestroy",{content:this}).defaultPrevented&&(this.remove(),this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0),this.isImageContent()&&this.element&&(this.element.onload=null,this.element.onerror=null,this.element=void 0))}displayError(){if(this.slide){var t,e;let n=Jt("pswp__error-msg","div");n.innerText=null!==(t=null===(e=this.instance.options)||void 0===e?void 0:e.errorMsg)&&void 0!==t?t:"",n=this.instance.applyFilters("contentErrorElement",n,this),this.element=Jt("pswp__content pswp__error-msg-container","div"),this.element.appendChild(n),this.slide.container.innerText="",this.slide.container.appendChild(this.element),this.slide.updateContentSize(!0),this.removePlaceholder()}}append(){if(this.isAttached||!this.element)return;if(this.isAttached=!0,this.state===vt.ERROR)return void this.displayError();if(this.instance.dispatch("contentAppend",{content:this}).defaultPrevented)return;const t="decode"in this.element;this.isImageContent()?t&&this.slide&&(!this.slide.isActive||Is())?(this.isDecoding=!0,this.element.decode().catch((()=>{})).finally((()=>{this.isDecoding=!1,this.appendImage()}))):this.appendImage():this.slide&&!this.element.parentNode&&this.slide.container.appendChild(this.element)}activate(){this.instance.dispatch("contentActivate",{content:this}).defaultPrevented||!this.slide||(this.isImageContent()&&this.isDecoding&&!Is()?this.appendImage():this.isError()&&this.load(!1,!0),this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","false"))}deactivate(){this.instance.dispatch("contentDeactivate",{content:this}),this.slide&&this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","true")}remove(){this.isAttached=!1,!this.instance.dispatch("contentRemove",{content:this}).defaultPrevented&&(this.element&&this.element.parentNode&&this.element.remove(),this.placeholder&&this.placeholder.element&&this.placeholder.element.remove())}appendImage(){this.isAttached&&(this.instance.dispatch("contentAppendImage",{content:this}).defaultPrevented||(this.slide&&this.element&&!this.element.parentNode&&this.slide.container.appendChild(this.element),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder()))}}function po(t,e){if(t.getViewportSizeFn){const n=t.getViewportSizeFn(t,e);if(n)return n}return{x:document.documentElement.clientWidth,y:window.innerHeight}}function fe(t,e,n,s,i){let o=0;if(e.paddingFn)o=e.paddingFn(n,s,i)[t];else if(e.padding)o=e.padding[t];else{const n="padding"+t[0].toUpperCase()+t.slice(1);e[n]&&(o=e[n])}return Number(o)||0}function fo(t,e,n,s){return{x:e.x-fe("left",t,e,n,s)-fe("right",t,e,n,s),y:e.y-fe("top",t,e,n,s)-fe("bottom",t,e,n,s)}}const Ts=4e3;class mo{constructor(t,e,n,s){this.pswp=s,this.options=t,this.itemData=e,this.index=n,this.panAreaSize=null,this.elementSize=null,this.fit=1,this.fill=1,this.vFill=1,this.initial=1,this.secondary=1,this.max=1,this.min=1}update(t,e,n){const s={x:t,y:e};this.elementSize=s,this.panAreaSize=n;const i=n.x/s.x,o=n.y/s.y;this.fit=Math.min(1,io?i:o),this.vFill=Math.min(1,o),this.initial=this._getInitial(),this.secondary=this._getSecondary(),this.max=Math.max(this.initial,this.secondary,this._getMax()),this.min=Math.min(this.fit,this.initial,this.secondary),this.pswp&&this.pswp.dispatch("zoomLevelsUpdate",{zoomLevels:this,slideData:this.itemData})}_parseZoomLevelOption(t){const e=t+"ZoomLevel",n=this.options[e];if(n)return"function"==typeof n?n(this):"fill"===n?this.fill:"fit"===n?this.fit:Number(n)}_getSecondary(){let t=this._parseZoomLevelOption("secondary");return t||(t=Math.min(1,3*this.fit),this.elementSize&&t*this.elementSize.x>Ts&&(t=Ts/this.elementSize.x),t)}_getInitial(){return this._parseZoomLevelOption("initial")||this.fit}_getMax(){return this._parseZoomLevelOption("max")||Math.max(1,4*this.fit)}}function Qs(t,e,n){const s=e.createContentFromData(t,n);let i;const{options:o}=e;if(o){let r;i=new mo(o,t,-1),r=e.pswp?e.pswp.viewportSize:po(o,e);const l=fo(o,r,t,n);i.update(s.width,s.height,l)}return s.lazyLoad(),i&&s.setDisplayedSize(Math.ceil(s.width*i.initial),Math.ceil(s.height*i.initial)),s}function go(t,e){const n=e.getItemData(t);if(!e.dispatch("lazyLoadSlide",{index:t,itemData:n}).defaultPrevented)return Qs(n,e,t)}class yo extends ao{getNumItems(){var t;let e=0;const n=null===(t=this.options)||void 0===t?void 0:t.dataSource;n&&"length"in n?e=n.length:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),n.items&&(e=n.items.length));const s=this.dispatch("numItems",{dataSource:n,numItems:e});return this.applyFilters("numItems",s.numItems,n)}createContentFromData(t,e){return new uo(t,this,e)}getItemData(t){var e;const n=null===(e=this.options)||void 0===e?void 0:e.dataSource;let s={};Array.isArray(n)?s=n[t]:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),s=n.items[t]);let i=s;i instanceof Element&&(i=this._domElementToItemData(i));const o=this.dispatch("itemData",{itemData:i||{},index:t});return this.applyFilters("itemData",o.itemData,t)}_getGalleryDOMElements(t){var e,n;return null!==(e=this.options)&&void 0!==e&&e.children||null!==(n=this.options)&&void 0!==n&&n.childSelector?Qt(this.options.children,this.options.childSelector,t)||[]:[t]}_domElementToItemData(t){const e={element:t},n="A"===t.tagName?t:t.querySelector("a");if(n){e.src=n.dataset.pswpSrc||n.href,n.dataset.pswpSrcset&&(e.srcset=n.dataset.pswpSrcset),e.width=n.dataset.pswpWidth?parseInt(n.dataset.pswpWidth,10):0,e.height=n.dataset.pswpHeight?parseInt(n.dataset.pswpHeight,10):0,e.w=e.width,e.h=e.height,n.dataset.pswpType&&(e.type=n.dataset.pswpType);const i=t.querySelector("img");var s;if(i)e.msrc=i.currentSrc||i.src,e.alt=null!==(s=i.getAttribute("alt"))&&void 0!==s?s:"";(n.dataset.pswpCropped||n.dataset.cropped)&&(e.thumbCropped=!0)}return this.applyFilters("domItemData",e,t,n)}lazyLoadData(t,e){return Qs(t,this,e)}}class vo extends yo{constructor(t){super(),this.options=t||{},this._uid=0,this.shouldOpen=!1,this._preloadedContent=void 0,this.onThumbnailsClick=this.onThumbnailsClick.bind(this)}init(){Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.addEventListener("click",this.onThumbnailsClick,!1)}))}onThumbnailsClick(t){if(co(t)||window.pswp)return;let e={x:t.clientX,y:t.clientY};!e.x&&!e.y&&(e=null);let n=this.getClickedIndex(t);n=this.applyFilters("clickedIndex",n,t,this);const s={gallery:t.currentTarget};n>=0&&(t.preventDefault(),this.loadAndOpen(n,s,e))}getClickedIndex(t){if(this.options.getClickedIndexFn)return this.options.getClickedIndexFn.call(this,t);const e=t.target,n=Qt(this.options.children,this.options.childSelector,t.currentTarget).findIndex((t=>t===e||t.contains(e)));return-1!==n?n:this.options.children||this.options.childSelector?-1:0}loadAndOpen(t,e,n){if(window.pswp||!this.options)return!1;if(!e&&this.options.gallery&&this.options.children){const t=Qt(this.options.gallery);t[0]&&(e={gallery:t[0]})}return this.options.index=t,this.options.initialPointerPos=n,this.shouldOpen=!0,this.preload(t,e),!0}preload(t,e){const{options:n}=this;e&&(n.dataSource=e);const s=[],i=typeof n.pswpModule;if(ro(n.pswpModule))s.push(Promise.resolve(n.pswpModule));else{if("string"===i)throw new Error("pswpModule as string is no longer supported");if("function"!==i)throw new Error("pswpModule is not valid");s.push(n.pswpModule())}"function"==typeof n.openPromise&&s.push(n.openPromise()),!1!==n.preloadFirstSlide&&t>=0&&(this._preloadedContent=go(t,this));const o=++this._uid;Promise.all(s).then((t=>{if(this.shouldOpen){const e=t[0];this._openPhotoswipe(e,o)}}))}_openPhotoswipe(t,e){if(e!==this._uid&&this.shouldOpen||(this.shouldOpen=!1,window.pswp))return;const n="object"==typeof t?new t.default(this.options):new t(this.options);this.pswp=n,window.pswp=n,Object.keys(this._listeners).forEach((t=>{var e;null===(e=this._listeners[t])||void 0===e||e.forEach((e=>{n.on(t,e)}))})),Object.keys(this._filters).forEach((t=>{var e;null===(e=this._filters[t])||void 0===e||e.forEach((e=>{n.addFilter(t,e.fn,e.priority)}))})),this._preloadedContent&&(n.contentLoader.addToCache(this._preloadedContent),this._preloadedContent=void 0),n.on("destroy",(()=>{this.pswp=void 0,delete window.pswp})),n.init()}destroy(){var t;null===(t=this.pswp)||void 0===t||t.destroy(),this.shouldOpen=!1,this._listeners={},Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.removeEventListener("click",this.onThumbnailsClick,!1)}))}}let te,wo=Jn((()=>import("./photoswipe.esm.CKijkUPa.js")),[]);function As(){te=new vo({gallery:".custom-md img, #post-cover img",pswpModule:()=>wo,closeSVG:'',zoomSVG:'',padding:{top:20,bottom:20,left:20,right:20},wheelToZoom:!0,arrowPrev:!1,arrowNext:!1,imageClickAction:"close",tapAction:"close",doubleTapAction:"zoom"}),te.addFilter("domItemData",((t,e)=>(e instanceof HTMLImageElement&&(t.src=e.src,t.w=Number(e.naturalWidth||window.innerWidth),t.h=Number(e.naturalHeight||window.innerHeight),t.msrc=e.src),t))),te.init()}const $s=()=>{te||As(),window.swup.hooks.on("page:view",(()=>{As()})),window.swup.hooks.on("content:replace",(()=>{te?.destroy?.()}),{before:!0})};window.swup?$s():document.addEventListener("swup:enable",$s);const pt=(t,e)=>{const{o:n,i:s,u:i}=t;let o,r=n;const l=(t,e)=>{const n=r,l=t,a=e||(s?!s(n,l):n!==l);return(a||i)&&(r=l,o=n),[r,a,o]};return[e?t=>l(e(r,o),t):l,t=>[r,!!t,o]]},bo=typeof window<"u"&&typeof HTMLElement<"u"&&!!window.document,ut=bo?window:{},tn=Math.max,So=Math.min,Ge=Math.round,Se=Math.abs,Ds=Math.sign,en=ut.cancelAnimationFrame,ds=ut.requestAnimationFrame,xe=ut.setTimeout,Xe=ut.clearTimeout,Te=t=>typeof ut[t]<"u"?ut[t]:void 0,xo=Te("MutationObserver"),ks=Te("IntersectionObserver"),Ee=Te("ResizeObserver"),ye=Te("ScrollTimeline"),hs=t=>void 0===t,Ae=t=>null===t,Ct=t=>"number"==typeof t,oe=t=>"string"==typeof t,us=t=>"boolean"==typeof t,wt=t=>"function"==typeof t,_t=t=>Array.isArray(t),Ce=t=>"object"==typeof t&&!_t(t)&&!Ae(t),ps=t=>{const e=!!t&&t.length,n=Ct(e)&&e>-1&&e%1==0;return!!(_t(t)||!wt(t)&&n)&&(!(e>0&&Ce(t))||e-1 in t)},_e=t=>!!t&&t.constructor===Object,Le=t=>t instanceof HTMLElement,$e=t=>t instanceof Element;function K(t,e){if(ps(t))for(let n=0;ne(t[n],n,t)));return t}const sn=(t,e)=>t.indexOf(e)>=0,ee=(t,e)=>t.concat(e),tt=(t,e,n)=>(!oe(e)&&ps(e)?Array.prototype.push.apply(t,e):t.push(e),t),Mt=t=>Array.from(t||[]),fs=t=>_t(t)?t:!oe(t)&&ps(t)?Mt(t):[t],Ye=t=>!!t&&!t.length,Je=t=>Mt(new Set(t)),gt=(t,e,n)=>{K(t,(t=>!t||t.apply(void 0,e||[]))),!n&&(t.length=0)},nn="paddingTop",on="paddingRight",cn="paddingLeft",rn="paddingBottom",ln="marginLeft",an="marginRight",dn="marginBottom",hn="overflowX",un="overflowY",De="width",ke="height",$t="visible",Ht="hidden",Zt="scroll",Eo=t=>{const e=String(t||"");return e?e[0].toUpperCase()+e.slice(1):""},Me=(t,e,n,s)=>{if(t&&e){let s=!0;return K(n,(n=>{t[n]!==e[n]&&(s=!1)})),s}return!1},pn=(t,e)=>Me(t,e,["w","h"]),ve=(t,e)=>Me(t,e,["x","y"]),Co=(t,e)=>Me(t,e,["t","r","b","l"]),zt=()=>{},A=(t,...e)=>t.bind(0,...e),Ft=t=>{let e;const n=t?xe:ds,s=t?Xe:en;return[i=>{s(e),e=n((()=>i()),wt(t)?t():t)},()=>s(e)]},Qe=(t,e)=>{const{_:n,v:s,p:i,S:o}=e||{};let r,l,a,c,d=zt;const h=function(e){d(),Xe(r),c=r=l=void 0,d=zt,t.apply(this,e)},p=t=>o&&l?o(l,t):t,u=()=>{d!==zt&&h(p(a)||a)},m=function(){const t=Mt(arguments),e=wt(n)?n():n;if(Ct(e)&&e>=0){const n=wt(s)?s():s,o=Ct(n)&&n>=0,m=e>0?xe:ds,y=e>0?Xe:en,f=p(t)||t,g=h.bind(0,f);let v;d(),i&&!c?(g(),c=!0,v=m((()=>c=void 0),e)):(v=m(g,e),o&&!r&&(r=xe(u,n))),d=()=>y(v),l=a=f}else h(t)};return m.m=u,m},fn=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),bt=t=>t?Object.keys(t):[],W=(t,e,n,s,i,o,r)=>{const l=[e,n,s,i,o,r];return("object"!=typeof t||Ae(t))&&!wt(t)&&(t={}),K(l,(e=>{K(e,((n,s)=>{const i=e[s];if(t===i)return!0;const o=_t(i);if(i&&_e(i)){const e=t[s];let n=e;o&&!_t(e)?n=[]:!o&&!_e(e)&&(n={}),t[s]=W(n,i)}else t[s]=o?i.slice():i}))})),t},mn=(t,e)=>K(W({},t),((t,e,n)=>{void 0===t?delete n[e]:t&&_e(t)&&(n[e]=mn(t))})),ms=t=>!bt(t).length,gn=(t,e,n)=>tn(t,So(e,n)),Rt=t=>Je((_t(t)?t:(t||"").split(" ")).filter((t=>t))),gs=(t,e)=>t&&t.getAttribute(e),Ms=(t,e)=>t&&t.hasAttribute(e),Ot=(t,e,n)=>{K(Rt(e),(e=>{t&&t.setAttribute(e,String(n||""))}))},xt=(t,e)=>{K(Rt(e),(e=>t&&t.removeAttribute(e)))},Pe=(t,e)=>{const n=Rt(gs(t,e)),s=A(Ot,t,e),i=(t,e)=>{const s=new Set(n);return K(Rt(t),(t=>{s[e](t)})),Mt(s).join(" ")};return{O:t=>s(i(t,"delete")),$:t=>s(i(t,"add")),C:t=>{const e=Rt(t);return e.reduce(((t,e)=>t&&n.includes(e)),e.length>0)}}},yn=(t,e,n)=>(Pe(t,e).O(n),A(ys,t,e,n)),ys=(t,e,n)=>(Pe(t,e).$(n),A(yn,t,e,n)),Oe=(t,e,n,s)=>(s?ys:yn)(t,e,n),vs=(t,e,n)=>Pe(t,e).C(n),vn=t=>Pe(t,"class"),wn=(t,e)=>{vn(t).O(e)},ws=(t,e)=>(vn(t).$(e),A(wn,t,e)),bn=(t,e)=>{const n=e?$e(e)&&e:document;return n?Mt(n.querySelectorAll(t)):[]},_o=(t,e)=>{const n=e?$e(e)&&e:document;return n&&n.querySelector(t)},ts=(t,e)=>$e(t)&&t.matches(e),Sn=t=>ts(t,"body"),es=t=>t?Mt(t.childNodes):[],se=t=>t&&t.parentElement,Nt=(t,e)=>$e(t)&&t.closest(e),ss=t=>document.activeElement,Lo=(t,e,n)=>{const s=Nt(t,e),i=t&&_o(n,s),o=Nt(i,e)===s;return!(!s||!i)&&(s===t||i===t||o&&Nt(Nt(t,n),e)!==s)},Wt=t=>{K(fs(t),(t=>{const e=se(t);t&&e&&e.removeChild(t)}))},ft=(t,e)=>A(Wt,t&&e&&K(fs(e),(e=>{e&&t.appendChild(e)}))),Bt=t=>{const e=document.createElement("div");return Ot(e,"class",t),e},xn=t=>{const e=Bt();return e.innerHTML=t.trim(),K(es(e),(t=>Wt(t)))},Ps=(t,e)=>t.getPropertyValue(e)||t[e]||"",En=t=>{const e=t||0;return isFinite(e)?e:0},me=t=>En(parseFloat(t||"")),ns=t=>Math.round(1e4*t)/1e4,Cn=t=>`${ns(En(t))}px`;function ne(t,e){t&&e&&K(e,((e,n)=>{try{const s=t.style,i=Ae(e)||us(e)?"":Ct(e)?Cn(e):e;0===n.indexOf("--")?s.setProperty(n,i):s[n]=i}catch{}}))}function Tt(t,e,n){const s=oe(e);let i=s?"":{};if(t){const o=ut.getComputedStyle(t,n)||t.style;i=s?Ps(o,e):Mt(e).reduce(((t,e)=>(t[e]=Ps(o,e),t)),i)}return i}const Hs=(t,e,n)=>{const s=e?`${e}-`:"",i=n?`-${n}`:"",o=`${s}top${i}`,r=`${s}right${i}`,l=`${s}bottom${i}`,a=`${s}left${i}`,c=Tt(t,[o,r,l,a]);return{t:me(c[o]),r:me(c[r]),b:me(c[l]),l:me(c[a])}},Oo=(t,e)=>"translate"+(Ce(t)?`(${t.x},${t.y})`:`Y(${t})`),Io=t=>!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length),To={w:0,h:0},He=(t,e)=>e?{w:e[`${t}Width`],h:e[`${t}Height`]}:To,Ao=t=>He("inner",t||ut),Vt=A(He,"offset"),_n=A(He,"client"),Ie=A(He,"scroll"),bs=t=>{const e=parseFloat(Tt(t,De))||0,n=parseFloat(Tt(t,ke))||0;return{w:e-Ge(e),h:n-Ge(n)}},Be=t=>t.getBoundingClientRect(),$o=t=>!!t&&Io(t),os=t=>!(!t||!t[ke]&&!t[De]),Ln=(t,e)=>{const n=os(t);return!os(e)&&n},zs=(t,e,n,s)=>{K(Rt(e),(e=>{t&&t.removeEventListener(e,n,s)}))},Y=(t,e,n,s)=>{var i;const o=null==(i=s&&s.H)||i,r=s&&s.I||!1,l=s&&s.A||!1,a={passive:o,capture:r};return A(gt,Rt(e).map((e=>{const s=l?i=>{zs(t,e,s,r),n&&n(i)}:n;return t&&t.addEventListener(e,s,a),A(zs,t,e,s,r)})))},On=t=>t.stopPropagation(),is=t=>t.preventDefault(),In=t=>On(t)||is(t),Et=(t,e)=>{const{x:n,y:s}=Ct(e)?{x:e,y:e}:e||{};Ct(n)&&(t.scrollLeft=n),Ct(s)&&(t.scrollTop=s)},mt=t=>({x:t.scrollLeft,y:t.scrollTop}),Tn=()=>({D:{x:0,y:0},M:{x:0,y:0}}),Do=(t,e)=>{const{D:n,M:s}=t,{w:i,h:o}=e,r=(t,e,n)=>{let s=Ds(t)*n,i=Ds(e)*n;if(s===i){const n=Se(t),o=Se(e);i=n>o?0:i,s=n{const n=(t,e)=>0===t&&t<=e;return{x:n(t.x,e.x),y:n(t.y,e.y)}},qs=({D:t,M:e},n)=>{const s=(t,e,n)=>gn(0,1,(t-n)/(t-e)||0);return{x:s(t.x,e.x,n.x),y:s(t.y,e.y,n.y)}},cs=t=>{t&&t.focus&&t.focus({preventScroll:!0})},Fs=(t,e)=>{K(fs(e),t)},rs=t=>{const e=new Map,n=(t,n)=>{if(t){const s=e.get(t);Fs((t=>{s&&s[t?"delete":"clear"](t)}),n)}else e.forEach((t=>{t.clear()})),e.clear()},s=(t,i)=>{if(oe(t)){const s=e.get(t)||new Set;return e.set(t,s),Fs((t=>{wt(t)&&s.add(t)}),i),A(n,t,i)}us(i)&&i&&n();const o=bt(t),r=[];return K(o,(e=>{const n=t[e];n&&tt(r,s(e,n))})),A(gt,r)};return s(t||{}),[s,n,(t,n)=>{K(Mt(e.get(t)),(t=>{n&&!Ye(n)?t.apply(0,n):t()}))}]},Ns=t=>JSON.stringify(t,((t,e)=>{if(wt(e))throw 0;return e})),Bs=(t,e)=>t?`${e}`.split(".").reduce(((t,e)=>t&&fn(t,e)?t[e]:void 0),t):void 0,ko={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},An=(t,e)=>{const n={};return K(ee(bt(e),bt(t)),(s=>{const i=t[s],o=e[s];if(Ce(i)&&Ce(o))W(n[s]={},An(i,o)),ms(n[s])&&delete n[s];else if(fn(e,s)&&o!==i){let t=!0;if(_t(i)||_t(o))try{Ns(i)===Ns(o)&&(t=!1)}catch{}t&&(n[s]=o)}})),n},Vs=(t,e,n)=>s=>[Bs(t,s),n||void 0!==Bs(e,s)],jt="data-overlayscrollbars",we="os-environment",ge=`${we}-scrollbar-hidden`,Ve=`${jt}-initialize`,be="noClipping",Zs=`${jt}-body`,Dt=jt,Mo="host",It=`${jt}-viewport`,Po=hn,Ho=un,zo="arrange",$n="measuring",Ro="scrolling",Dn="scrollbarHidden",qo="noContent",ls=`${jt}-padding`,Ws=`${jt}-content`,Ss="os-size-observer",Fo=`${Ss}-appear`,No=`${Ss}-listener`,Bo="os-trinsic-observer",Vo="os-theme-none",yt="os-scrollbar",Zo=`${yt}-rtl`,Wo=`${yt}-horizontal`,Uo=`${yt}-vertical`,kn=`${yt}-track`,xs=`${yt}-handle`,jo=`${yt}-visible`,Ko=`${yt}-cornerless`,Us=`${yt}-interaction`,js=`${yt}-unusable`,as=`${yt}-auto-hide`,Ks=`${as}-hidden`,Gs=`${yt}-wheel`,Go=`${kn}-interactive`,Xo=`${xs}-interactive`;let Mn;const Yo=()=>Mn,Jo=t=>{Mn=t};let Ze;const Qo=()=>{const t=(t,e,n)=>{ft(document.body,t),ft(document.body,t);const s=_n(t),i=Vt(t),o=bs(e);return n&&Wt(t),{x:i.h-s.h+o.h,y:i.w-s.w+o.w}},e=xn(`
`)[0],n=e.firstChild,s=e.lastChild,i=Yo();i&&(s.nonce=i);const[o,,r]=rs(),[l,a]=pt({o:t(e,n),i:ve},A(t,e,n,!0)),[c]=a(),d=(t=>{let e=!1;const n=ws(t,ge);try{e="none"===Tt(t,"scrollbar-width")||"none"===Tt(t,"display","::-webkit-scrollbar")}catch{}return n(),e})(e),h={x:0===c.x,y:0===c.y},p={elements:{host:null,padding:!d,viewport:t=>d&&Sn(t)&&t,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},u=W({},ko),m=A(W,{},u),y=A(W,{},p),f={T:c,k:h,R:d,V:!!ye,L:A(o,"r"),U:y,P:t=>W(p,t)&&y(),N:m,q:t=>W(u,t)&&m(),B:W({},p),F:W({},u)};if(xt(e,"style"),Wt(e),Y(ut,"resize",(()=>{r("r",[])})),wt(ut.matchMedia)&&!d&&(!h.x||!h.y)){const t=e=>{const n=ut.matchMedia(`(resolution: ${ut.devicePixelRatio}dppx)`);Y(n,"change",(()=>{e(),t(e)}),{A:!0})};t((()=>{const[t,e]=l();W(f.T,t),r("r",[e])}))}return f},Lt=()=>(Ze||(Ze=Qo()),Ze),Pn=(t,e)=>wt(e)?e.apply(0,t):e,ti=(t,e,n,s)=>{const i=hs(s)?n:s;return Pn(t,i)||e.apply(0,t)},Hn=(t,e,n,s)=>{const i=hs(s)?n:s,o=Pn(t,i);return!!o&&(Le(o)?o:e.apply(0,t))},ei=(t,e)=>{const{nativeScrollbarsOverlaid:n,body:s}=e||{},{k:i,R:o,U:r}=Lt(),{nativeScrollbarsOverlaid:l,body:a}=r().cancel,c=n??l,d=hs(s)?a:s,h=(i.x||i.y)&&c,p=t&&(Ae(d)?!o:d);return!!h||!!p},Es=new WeakMap,si=(t,e)=>{Es.set(t,e)},ni=t=>{Es.delete(t)},zn=t=>Es.get(t),oi=(t,e,n)=>{let s=!1;const i=!!n&&new WeakMap,o=o=>{if(i&&n){K(n.map((e=>{const[n,s]=e||[];return[s&&n?(o||bn)(n,t):[],s]})),(n=>K(n[0],(o=>{const r=n[1],l=i.get(o)||[];if(t.contains(o)&&r){const t=Y(o,r,(n=>{s?(t(),i.delete(o)):e(n)}));i.set(o,tt(l,t))}else gt(l),i.delete(o)}))))}};return o(),[()=>{s=!0},o]},Xs=(t,e,n,s)=>{let i=!1;const{j:o,X:r,Y:l,W:a,J:c,G:d}=s||{},h=Qe((()=>i&&n(!0)),{_:33,v:99}),[p,u]=oi(t,h,l),m=r||[],y=ee(o||[],m),f=(i,o)=>{if(!Ye(o)){const r=c||zt,l=d||zt,h=[],p=[];let y=!1,f=!1;if(K(o,(n=>{const{attributeName:i,target:o,type:c,oldValue:d,addedNodes:u,removedNodes:g}=n,v="attributes"===c,w="childList"===c,b=t===o,x=v&&i,E=x&&gs(o,i||""),A=oe(E)?E:null,L=x&&d!==A,S=sn(m,i)&&L;if(e&&(w||!b)){const e=v&&L,c=e&&a&&ts(o,a),p=(c?!r(o,i,d,A):!v||e)&&!l(n,!!c,t,s);K(u,(t=>tt(h,t))),K(g,(t=>tt(h,t))),f=f||p}!e&&b&&L&&!r(o,i,d,A)&&(tt(p,i),y=y||S)})),u((t=>Je(h).reduce(((e,n)=>(tt(e,bn(t,n)),ts(n,t)?tt(e,n):e)),[]))),e)return!i&&f&&n(!1),[!1];if(!Ye(p)||y){const t=[Je(p),y];return!i&&n.apply(0,t),t}}},g=new xo(A(f,!1));return[()=>(g.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,()=>{i&&(p(),g.disconnect(),i=!1)}),()=>{if(i)return h.m(),f(!0,g.takeRecords())}]},Rn={},qn={},ii=t=>{K(t,(t=>K(t,((e,n)=>{Rn[n]=t[n]}))))},Fn=(t,e,n)=>bt(t).map((s=>{const{static:i,instance:o}=t[s],[r,l,a]=n||[],c=n?o:i;if(c){const t=n?c(r,l,e):c(e);return(a||qn)[s]=t}})),ie=t=>qn[t],ci="__osOptionsValidationPlugin",ri="__osSizeObserverPlugin",li=(t,e)=>{const{k:n}=e,[s,i]=t("showNativeOverlaidScrollbars");return[s&&n.x&&n.y,i]},Ut=t=>0===t.indexOf($t),ai=(t,e)=>{const n=(t,e,n,s)=>{const i=t===$t?Ht:t.replace(`${$t}-`,""),o=Ut(t),r=Ut(n);return e||s?o&&r?$t:o?e&&s?i:e?$t:Ht:e?i:r&&s?$t:Ht:Ht},s={x:n(e.x,t.x,e.y,t.y),y:n(e.y,t.y,e.x,t.x)};return{K:s,Z:{x:s.x===Zt,y:s.y===Zt}}},Nn="__osScrollbarsHidingPlugin",di="__osClickScrollPlugin",Bn=(t,e,n)=>{const{dt:s}=n||{},i=ie(ri),[o]=pt({o:!1,u:!0});return()=>{const n=[],r=xn(`
`)[0],l=r.firstChild,a=t=>{let n=!1,s=!1;if(t instanceof ResizeObserverEntry){const[e,,i]=o(t.contentRect),r=os(e);s=Ln(e,i),n=!s&&!r}else s=!0===t;n||e({ft:!0,dt:s})};if(Ee){const t=new Ee((t=>a(t.pop())));t.observe(l),tt(n,(()=>{t.disconnect()}))}else{if(!i)return zt;{const[t,e]=i(l,a,s);tt(n,ee([ws(r,Fo),Y(r,"animationstart",t)],e))}}return A(gt,tt(n,ft(t,r)))}},hi=(t,e)=>{let n;const s=Bt(Bo),[i]=pt({o:!1}),o=(t,n)=>{if(t){const s=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=s;return o&&!n&&e(s)&&[s]}},r=(t,e)=>o(e.pop(),t);return[()=>{const e=[];if(ks)n=new ks(A(r,!1),{root:t}),n.observe(s),tt(e,(()=>{n.disconnect()}));else{const t=()=>{const t=Vt(s);o(t)};tt(e,Bn(s,t)()),t()}return A(gt,tt(e,ft(t,s)))},()=>n&&r(!0,n.takeRecords())]},ui=(t,e,n,s)=>{let i,o,r,l,a,c;const d=`[${Dt}]`,h=`[${It}]`,p=["id","class","style","open","wrap","cols","rows"],{vt:u,ht:m,ot:y,gt:f,bt:g,nt:v,wt:w,yt:b,St:x,Ot:E}=t,A=t=>"rtl"===Tt(t,"direction"),L={$t:!1,ct:A(u)},S=Lt(),I=ie(Nn),[C]=pt({i:pn,o:{w:0,h:0}},(()=>{const s=I&&I.tt(t,e,L,S,n).ut,i=!(w&&v)&&vs(m,Dt,be),o=!v&&b(zo),r=o&&mt(f),l=r&&E(),a=x($n,i),c=o&&s&&s()[0],d=Ie(y),h=bs(y);return c&&c(),Et(f,r),l&&l(),i&&a(),{w:d.w+h.w,h:d.h+h.h}})),_=Qe(s,{_:()=>i,v:()=>o,S(t,e){const[n]=t,[s]=e;return[ee(bt(n),bt(s)).reduce(((t,e)=>(t[e]=n[e]||s[e],t)),{})]}}),D=t=>{const e=A(u);W(t,{Ct:c!==e}),W(L,{ct:e}),c=e},T=(t,e)=>{const[n,i]=t,o={xt:i};return W(L,{$t:n}),!e&&s(o),o},O=({ft:t,dt:e})=>{const n=t&&!e||!S.R?s:_,i={ft:t||e,dt:e};D(i),n(i)},$=(t,e)=>{const[,n]=C(),i={Ht:n};return D(i),n&&!e&&(t?s:_)(i),i},k=(t,e,n)=>{const s={Et:e};return D(s),e&&!n&&_(s),s},[M,z]=g?hi(m,T):[],H=!v&&Bn(m,O,{dt:!0}),[R,P]=Xs(m,!1,k,{X:p,j:p}),q=v&&Ee&&new Ee((t=>{const e=t[t.length-1].contentRect;O({ft:!0,dt:Ln(e,a)}),a=e})),F=Qe((()=>{const[,t]=C();s({Ht:t})}),{_:222,p:!0});return[()=>{q&&q.observe(m);const t=H&&H(),e=M&&M(),n=R(),s=S.L((t=>{t?_({zt:t}):F()}));return()=>{q&&q.disconnect(),t&&t(),e&&e(),l&&l(),n(),s()}},({It:t,At:e,Dt:n})=>{const s={},[a]=t("update.ignoreMutation"),[c,u]=t("update.attributes"),[m,f]=t("update.elementEvents"),[w,b]=t("update.debounce"),x=e||n;if(f||u){r&&r(),l&&l();const[t,e]=Xs(g||y,!0,$,{j:ee(p,c||[]),Y:m,W:d,G:(t,e)=>{const{target:n,attributeName:s}=t;return!(e||!s||v)&&Lo(n,d,h)||!!Nt(n,`.${yt}`)||!!(t=>wt(a)&&a(t))(t)}});l=t(),r=e}if(b)if(_.m(),_t(w)){const t=w[0],e=w[1];i=Ct(t)&&t,o=Ct(e)&&e}else Ct(w)?(i=w,o=!1):(i=!1,o=!1);if(x){const t=P(),e=z&&z(),n=r&&r();t&&W(s,k(t[0],t[1],x)),e&&W(s,T(e[0],x)),n&&W(s,$(n[0],x))}return D(s),s},L]},pi=(t,e,n,s)=>{const i="--os-viewport-percent",o="--os-scroll-percent",r="--os-scroll-direction",{U:l}=Lt(),{scrollbars:a}=l(),{slot:c}=a,{vt:d,ht:h,ot:p,Mt:u,gt:m,wt:y,nt:f}=e,{scrollbars:g}=u?{}:t,{slot:v}=g||{},w=[],b=[],x=[],E=Hn([d,h,p],(()=>f&&y?d:h),c,v),L=t=>{if(ye){const e=new ye({source:m,axis:t});return{kt:t=>{const n=t.Tt.animate({clear:["left"],[o]:[0,1]},{timeline:e});return()=>n.cancel()}}}},S={x:L("x"),y:L("y")},I=(t,e,n)=>{const s=n?ws:wn;K(t,(t=>{s(t.Tt,e)}))},C=(t,e)=>{K(t,(t=>{const[n,s]=e(t);ne(n,s)}))},_=(t,e,n)=>{const s=us(n),i=!s||!n;(!s||n)&&I(b,t,e),i&&I(x,t,e)},D=t=>{const e=t?"x":"y",n=Bt(`${yt} ${t?Wo:Uo}`),i=Bt(kn),o=Bt(xs),r={Tt:n,Ut:i,Pt:o},l=S[e];return tt(t?b:x,r),tt(w,[ft(n,i),ft(i,o),A(Wt,n),l&&l.kt(r),s(r,_,t)]),r},T=A(D,!0),O=A(D,!1);return T(),O(),[{Nt:()=>{const t=(()=>{const{Rt:t,Vt:e}=n,s=(t,e)=>gn(0,1,t/(t+e)||0);return{x:s(e.x,t.x),y:s(e.y,t.y)}})(),e=t=>e=>[e.Tt,{[i]:ns(t)+""}];C(b,e(t.x)),C(x,e(t.y))},qt:()=>{if(!ye){const{Lt:t}=n,e=qs(t,mt(m)),s=t=>e=>[e.Tt,{[o]:ns(t)+""}];C(b,s(e.x)),C(x,s(e.y))}},Bt:()=>{const{Lt:t}=n,e=Rs(t),s=t=>e=>[e.Tt,{[r]:t?"0":"1"}];C(b,s(e.x)),C(x,s(e.y))},Ft:()=>{if(f&&!y){const{Rt:t,Lt:e}=n,s=Rs(e),i=qs(e,mt(m)),o=e=>{const{Tt:n}=e,o=se(n)===p&&n,r=(t,e,n)=>{const s=e*t;return Cn(n?s:-s)};return[o,o&&{transform:Oo({x:r(i.x,t.x,s.x),y:r(i.y,t.y,s.y)})}]};C(b,o),C(x,o)}},jt:_,Xt:{Yt:b,Wt:T,Jt:A(C,b)},Gt:{Yt:x,Wt:O,Jt:A(C,x)}},()=>(ft(E,b[0].Tt),ft(E,x[0].Tt),A(gt,w))]},fi=(t,e,n,s)=>(i,o,r)=>{const{ht:l,ot:a,nt:c,gt:d,Kt:h,Ot:p}=e,{Tt:u,Ut:m,Pt:y}=i,[f,g]=Ft(333),[v,w]=Ft(444),b=t=>{wt(d.scrollBy)&&d.scrollBy({behavior:"smooth",left:t.x,top:t.y})};let x=!0;return A(gt,[Y(y,"pointermove pointerleave",s),Y(u,"pointerenter",(()=>{o(Us,!0)})),Y(u,"pointerleave pointercancel",(()=>{o(Us,!1)})),!c&&Y(u,"mousedown",(()=>{const t=ss();(Ms(t,It)||Ms(t,Dt)||t===document.body)&&xe(A(cs,a),25)})),Y(u,"wheel",(t=>{const{deltaX:e,deltaY:n,deltaMode:s}=t;x&&0===s&&se(u)===l&&b({x:e,y:n}),x=!1,o(Gs,!0),f((()=>{x=!0,o(Gs)})),is(t)}),{H:!1,I:!0}),Y(u,"pointerdown",A(Y,h,"click",In,{A:!0,I:!0,H:!1}),{I:!0}),(()=>{const e="pointerup pointercancel lostpointercapture",s="client"+(r?"X":"Y"),i=r?De:ke,o=r?"left":"top",l=r?"w":"h",a=r?"x":"y",c=[];return Y(m,"pointerdown",(r=>{const u=Nt(r.target,`.${xs}`)===y,f=u?y:m,g=t.scrollbars,x=g[u?"dragScroll":"clickScroll"],{button:E,isPrimary:L,pointerType:S}=r,{pointers:I}=g;if(0===E&&L&&x&&(I||[]).includes(S)){gt(c),w();const t=!u&&(r.shiftKey||"instant"===x),g=A(Be,y),E=A(Be,m),L=(t,e)=>(t||g())[o]-(e||E())[o],S=Ge(Be(d)[i])/Vt(d)[l]||1,I=((t,e)=>s=>{const{Rt:i}=n,o=Vt(m)[l]-Vt(y)[l],r=e*s/o*i[a];Et(d,{[a]:t+r})})(mt(d)[a],1/S),C=r[s],_=g(),D=E(),T=_[i],O=L(_,D)+T/2,$=C-D[o],k=u?0:$-O,M=t=>{gt(H),f.releasePointerCapture(t.pointerId)},W=u||t,z=p(),H=[Y(h,e,M),Y(h,"selectstart",(t=>is(t)),{H:!1}),Y(m,e,M),W&&Y(m,"pointermove",(t=>I(k+(t[s]-C)))),W&&(()=>{const t=mt(d);z();const e=mt(d),n={x:e.x-t.x,y:e.y-t.y};(Se(n.x)>3||Se(n.y)>3)&&(p(),Et(d,t),b(n),v(z))})];if(f.setPointerCapture(r.pointerId),t)I(k);else if(!u){const t=ie(di);if(t){const e=t(I,k,T,(t=>{t?z():tt(H,z)}));tt(H,e),tt(c,A(e,!0))}}}}))})(),g,w])},mi=(t,e,n,s,i,o)=>{let r,l,a,c,d,h=zt,p=0;const u=t=>"mouse"===t.pointerType,[m,y]=Ft(),[f,g]=Ft(100),[v,w]=Ft(100),[b,x]=Ft((()=>p)),[E,L]=pi(t,i,s,fi(e,i,s,(t=>u(t)&&M()))),{ht:S,Qt:I,wt:C}=i,{jt:_,Nt:D,qt:T,Bt:O,Ft:$}=E,k=(t,e)=>{if(x(),t)_(Ks);else{const t=A(_,Ks,!0);p>0&&!e?b(t):t()}},M=()=>{(a?!r:!c)&&(k(!0),f((()=>{k(!1)})))},W=t=>{_(as,t,!0),_(as,t,!1)},z=t=>{u(t)&&(r=a,a&&k(!0))},H=[x,g,w,y,()=>h(),Y(S,"pointerover",z,{A:!0}),Y(S,"pointerenter",z),Y(S,"pointerleave",(t=>{u(t)&&(r=!1,a&&k(!1))})),Y(S,"pointermove",(t=>{u(t)&&l&&M()})),Y(I,"scroll",(t=>{m((()=>{T(),M()})),o(t),$()}))];return[()=>A(gt,tt(H,L())),({It:t,Dt:e,Zt:i,tn:o})=>{const{nn:r,sn:u,en:m,cn:y}=o||{},{Ct:f,dt:g}=i||{},{ct:w}=n,{k:b}=Lt(),{K:x,rn:E}=s,[L,S]=t("showNativeOverlaidScrollbars"),[M,z]=t("scrollbars.theme"),[H,R]=t("scrollbars.visibility"),[P,q]=t("scrollbars.autoHide"),[F,N]=t("scrollbars.autoHideSuspend"),[K]=t("scrollbars.autoHideDelay"),[B,Z]=t("scrollbars.dragScroll"),[j,V]=t("scrollbars.clickScroll"),[U,G]=t("overflow"),Q=g&&!e,J=E.x||E.y,X=r||u||y||f||e,tt=m||R||G,et=L&&b.x&&b.y,nt=(t,e,n)=>{const s=t.includes(Zt)&&(H===$t||"auto"===H&&e===Zt);return _(jo,s,n),s};if(p=K,Q&&(F&&J?(W(!1),h(),v((()=>{h=Y(I,"scroll",A(W,!0),{A:!0})}))):W(!0)),S&&_(Vo,et),z&&(_(d),_(M,!0),d=M),N&&!F&&W(!0),q&&(l="move"===P,a="leave"===P,c="never"===P,k(c,!0)),Z&&_(Xo,B),V&&_(Go,!!j),tt){const t=nt(U.x,x.x,!0),e=nt(U.y,x.y,!1);_(Ko,!(t&&e))}X&&(T(),D(),$(),y&&O(),_(js,!E.x,!0),_(js,!E.y,!1),_(Zo,w&&!C))},{},E]},gi=t=>{const e=Lt(),{U:n,R:s}=e,{elements:i}=n(),{padding:o,viewport:r,content:l}=i,a=Le(t),c=a?{}:t,{elements:d}=c,{padding:h,viewport:p,content:u}=d||{},m=a?t:c.target,y=Sn(m),f=m.ownerDocument,g=f.documentElement,v=()=>f.defaultView||ut,w=A(ti,[m]),b=A(Hn,[m]),x=A(Bt,""),E=A(w,x,r),L=A(b,x,l),S=E(p),I=S===m,C=I&&y,_=!I&&L(u),D=!I&&S===_,T=C?g:S,O=C?T:m,$=!I&&b(x,o,h),k=!D&&_,M=[k,T,$,O].map((t=>Le(t)&&!se(t)&&t)),W=t=>t&&sn(M,t),z=!W(T)&&(t=>{const e=Vt(t),n=Ie(t),s=Tt(t,hn),i=Tt(t,un);return n.w-e.w>0&&!Ut(s)||n.h-e.h>0&&!Ut(i)})(T)?T:m,H=C?g:T,R={vt:m,ht:O,ot:T,ln:$,bt:k,gt:H,Qt:C?f:T,an:y?g:z,Kt:f,wt:y,Mt:a,nt:I,un:v,yt:t=>vs(T,It,t),St:(t,e)=>Oe(T,It,t,e),Ot:()=>Oe(H,It,Ro,!0)},{vt:P,ht:q,ln:F,ot:N,bt:K}=R,B=[()=>{xt(q,[Dt,Ve]),xt(P,Ve),y&&xt(g,[Ve,Dt])}];let Z=es([K,N,F,q,P].find((t=>t&&!W(t))));const j=C?P:K||N,V=A(gt,B);return[R,()=>{const t=v(),e=ss(),n=t=>{ft(se(t),es(t)),Wt(t)},i=t=>Y(t,"focusin focusout focus blur",In,{I:!0,H:!1}),o="tabindex",r=gs(N,o),l=i(e);return Ot(q,Dt,I?"":Mo),Ot(F,ls,""),Ot(N,It,""),Ot(K,Ws,""),I||(Ot(N,o,r||"-1"),y&&Ot(g,Zs,"")),ft(j,Z),ft(q,F),ft(F||q,!I&&N),ft(N,K),tt(B,[l,()=>{const t=ss(),e=W(N),s=e&&t===N?P:t,l=i(s);xt(F,ls),xt(K,Ws),xt(N,It),y&&xt(g,Zs),r?Ot(N,o,r):xt(N,o),W(K)&&n(K),e&&n(N),W(F)&&n(F),cs(s),l()}]),s&&!I&&(ys(N,It,Dn),tt(B,A(xt,N,It))),cs(!I&&y&&e===P&&t.top===t?N:e),l(),Z=0,V},V]},yi=({bt:t})=>({Zt:e,_n:n,Dt:s})=>{const{xt:i}=e||{},{$t:o}=n;t&&(i||s)&&ne(t,{[ke]:o&&"100%"})},vi=({ht:t,ln:e,ot:n,nt:s},i)=>{const[o,r]=pt({i:Co,o:Hs()},A(Hs,t,"padding",""));return({It:t,Zt:l,_n:a,Dt:c})=>{let[d,h]=r(c);const{R:p}=Lt(),{ft:u,Ht:m,Ct:y}=l||{},{ct:f}=a,[g,v]=t("paddingAbsolute");(u||h||c||m)&&([d,h]=o(c));const w=!s&&(v||y||h);if(w){const t=!g||!e&&!p,s=d.r+d.l,o=d.t+d.b,r={[an]:t&&!f?-s:0,[dn]:t?-o:0,[ln]:t&&f?-s:0,top:t?-d.t:0,right:t?f?-d.r:"auto":0,left:t?f?"auto":-d.l:0,[De]:t&&`calc(100% + ${s}px)`},l={[nn]:t?d.t:0,[on]:t?d.r:0,[rn]:t?d.b:0,[cn]:t?d.l:0};ne(e||n,r),ne(n,l),W(i,{ln:d,dn:!t,rt:e?l:W({},r,l)})}return{fn:w}}},wi=(t,e)=>{const n=Lt(),{ht:s,ln:i,ot:o,nt:r,Qt:l,gt:a,wt:c,St:d,un:h}=t,{R:p}=n,u=c&&r,m=A(tn,0),y={display:()=>!1,direction:t=>"ltr"!==t,flexDirection:t=>t.endsWith("-reverse"),writingMode:t=>"horizontal-tb"!==t},f=bt(y),g={i:pn,o:{w:0,h:0}},v={i:ve,o:{}},w=t=>{d($n,!u&&t)},[b,x]=pt(g,A(bs,o)),[E,L]=pt(g,A(Ie,o)),[S,I]=pt(g),[C]=pt(v),[_,D]=pt(g),[T]=pt(v),[O]=pt({i:(t,e)=>Me(t,e,f),o:{}},(()=>$o(o)?Tt(o,f):{})),[$,k]=pt({i:(t,e)=>ve(t.D,e.D)&&ve(t.M,e.M),o:Tn()}),M=ie(Nn),z=(t,e)=>`${e?Po:Ho}${Eo(t)}`;return({It:r,Zt:c,_n:g,Dt:v},{fn:A})=>{const{ft:H,Ht:R,Ct:P,dt:q,zt:F}=c||{},N=M&&M.tt(t,e,g,n,r),{it:K,ut:B,_t:Z}=N||{},[j,V]=li(r,n),[U,G]=r("overflow"),Q=Ut(U.x),J=Ut(U.y);let X=x(v),tt=L(v),et=I(v),nt=D(v);V&&p&&d(Dn,!j);{vs(s,Dt,be)&&w(!0);const[t]=B?B():[],[e]=X=b(v),[n]=tt=E(v),i=_n(o),r=u&&Ao(h()),l={w:m(n.w+e.w),h:m(n.h+e.h)},a={w:m((r?r.w:i.w+m(i.w-n.w))+e.w),h:m((r?r.h:i.h+m(i.h-n.h))+e.h)};t&&t(),nt=_(a),et=S(((t,e)=>{const n=ut.devicePixelRatio%1!=0?1:0,s={w:m(t.w-e.w),h:m(t.h-e.h)};return{w:s.w>n?s.w:0,h:s.h>n?s.h:0}})(l,a),v)}const[st,it]=nt,[ot,rt]=et,[lt,at]=tt,[ct,dt]=X,[ht,pt]=C({x:ot.w>0,y:ot.h>0}),yt=Q&&J&&(ht.x||ht.y)||Q&&ht.x&&!ht.y||J&&ht.y&&!ht.x,ft=A||P||F||dt||at||it||rt||G||V||!0,gt=ai(ht,U),[vt,wt]=T(gt.K),[xt,At]=O(v),Lt=P||q||At||pt||v,[St,It]=Lt?$((t=>{if(!f.some((e=>{const n=t[e];return n&&y[e](n)})))return{D:{x:0,y:0},M:{x:1,y:1}};w(!0);const e=mt(a),n=d(qo,!0),s=Y(l,Zt,(t=>{const n=mt(a);t.isTrusted&&n.x===e.x&&n.y===e.y&&On(t)}),{I:!0,A:!0});Et(a,{x:0,y:0}),n();const i=mt(a),o=Ie(a);Et(a,{x:o.w,y:o.h});const r=mt(a);Et(a,{x:r.x-i.x<1&&-o.w,y:r.y-i.y<1&&-o.h});const c=mt(a);return Et(a,e),ds((()=>s())),{D:i,M:c}})(xt),v):k();return ft&&(wt&&(t=>{const e=t=>[$t,Ht,Zt].map((e=>z(e,t))),n=e(!0).concat(e()).join(" ");d(n),d(bt(t).map((e=>z(t[e],"x"===e))).join(" "),!0)})(gt.K),Z&&K&&ne(o,Z(gt,g,K(gt,lt,ct)))),w(!1),Oe(s,Dt,be,yt),Oe(i,ls,be,yt),W(e,{K:vt,Vt:{x:st.w,y:st.h},Rt:{x:ot.w,y:ot.h},rn:ht,Lt:Do(St,ot)}),{en:wt,nn:it,sn:rt,cn:It||rt,vn:Lt}}},bi=t=>{const[e,n,s]=gi(t),i={ln:{t:0,r:0,b:0,l:0},dn:!1,rt:{[an]:0,[dn]:0,[ln]:0,[nn]:0,[on]:0,[rn]:0,[cn]:0},Vt:{x:0,y:0},Rt:{x:0,y:0},K:{x:Ht,y:Ht},rn:{x:!1,y:!1},Lt:Tn()},{vt:o,gt:r,nt:l,Ot:a}=e,{R:c,k:d}=Lt(),h=!c&&(d.x||d.y),p=[yi(e),vi(e,i),wi(e,i)];return[n,t=>{const e={},n=h&&mt(r),s=n&&a();return K(p,(n=>{W(e,n(t,e)||{})})),Et(r,n),s&&s(),!l&&Et(o,0),e},i,e,s]},Si=(t,e,n,s,i)=>{let o=!1;const r=Vs(e,{}),[l,a,c,d,h]=bi(t),[p,u,m]=ui(d,c,r,(t=>{w({},t)})),[y,f,,g]=mi(t,e,m,c,d,i),v=t=>bt(t).some((e=>!!t[e])),w=(t,i)=>{if(n())return!1;const{pn:r,Dt:l,At:c,hn:d}=t,h=r||{},p=!!l||!o,y={It:Vs(e,h,p),pn:h,Dt:p};if(d)return f(y),!1;const g=i||u(W({},y,{At:c})),w=a(W({},y,{_n:m,Zt:g}));f(W({},y,{Zt:g,tn:w}));const b=v(g),x=v(w),E=b||x||!ms(h)||p;return o=!0,E&&s(t,{Zt:g,tn:w}),E};return[()=>{const{an:t,gt:e,Ot:n}=d,s=mt(t),i=[p(),l(),y()],o=n();return Et(e,s),o(),A(gt,i)},w,()=>({gn:m,bn:c}),{wn:d,yn:g},h]},kt=(t,e,n)=>{const{N:s}=Lt(),i=Le(t),o=i?t:t.target,r=zn(o);if(e&&!r){let r=!1;const l=[],a={},c=t=>{const e=mn(t),n=ie(ci);return n?n(e,!0):e},d=W({},s(),c(e)),[h,p,u]=rs(),[m,y,f]=rs(n),g=(t,e)=>{f(t,e),u(t,e)},[v,w,b,x,E]=Si(t,d,(()=>r),(({pn:t,Dt:e},{Zt:n,tn:s})=>{const{ft:i,Ct:o,xt:r,Ht:l,Et:a,dt:c}=n,{nn:d,sn:h,en:p,cn:u}=s;g("updated",[S,{updateHints:{sizeChanged:!!i,directionChanged:!!o,heightIntrinsicChanged:!!r,overflowEdgeChanged:!!d,overflowAmountChanged:!!h,overflowStyleChanged:!!p,scrollCoordinatesChanged:!!u,contentMutation:!!l,hostMutation:!!a,appear:!!c},changedOptions:t||{},force:!!e}])}),(t=>g("scroll",[S,t]))),L=t=>{ni(o),gt(l),r=!0,g("destroyed",[S,t]),p(),y()},S={options(t,e){if(t){const n=e?s():{},i=An(d,W(n,c(t)));ms(i)||(W(d,i),w({pn:i}))}return W({},d)},on:m,off:(t,e)=>{t&&e&&y(t,e)},state(){const{gn:t,bn:e}=b(),{ct:n}=t,{Vt:s,Rt:i,K:o,rn:l,ln:a,dn:c,Lt:d}=e;return W({},{overflowEdge:s,overflowAmount:i,overflowStyle:o,hasOverflow:l,scrollCoordinates:{start:d.D,end:d.M},padding:a,paddingAbsolute:c,directionRTL:n,destroyed:r})},elements(){const{vt:t,ht:e,ln:n,ot:s,bt:i,gt:o,Qt:r}=x.wn,{Xt:l,Gt:a}=x.yn,c=t=>{const{Pt:e,Ut:n,Tt:s}=t;return{scrollbar:s,track:n,handle:e}},d=t=>{const{Yt:e,Wt:n}=t,s=c(e[0]);return W({},s,{clone:()=>{const t=c(n());return w({hn:!0}),t}})};return W({},{target:t,host:e,padding:n||s,viewport:s,content:i||s,scrollOffsetElement:o,scrollEventElement:r,scrollbarHorizontal:d(l),scrollbarVertical:d(a)})},update:t=>w({Dt:t,At:!0}),destroy:A(L,!1),plugin:t=>a[bt(t)[0]]};return tt(l,[E]),si(o,S),Fn(Rn,kt,[S,h,a]),ei(x.wn.wt,!i&&t.cancel)?(L(!0),S):(tt(l,v()),g("initialized",[S]),S.update(),S)}return r};kt.plugin=t=>{const e=_t(t),n=e?t:[t],s=n.map((t=>Fn(t,kt)[0]));return ii(n),e?s:s[0]},kt.valid=t=>{const e=t&&t.elements,n=wt(e)&&e();return _e(n)&&!!zn(n.target)},kt.env=()=>{const{T:t,k:e,R:n,V:s,B:i,F:o,U:r,P:l,N:a,q:c}=Lt();return W({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,scrollTimeline:s,staticDefaultInitialization:i,staticDefaultOptions:o,getDefaultInitialization:r,setDefaultInitialization:l,getDefaultOptions:a,setDefaultOptions:c})},kt.nonce=Jo;const Vn=!!document.getElementById("banner-wrapper");function Cs(t,e){document.addEventListener("click",(n=>{let s=document.getElementById(t),i=n.target;if(i instanceof Node){for(let t of e){let e=document.getElementById(t);if(e==i||e?.contains(i))return}s.classList.add("float-panel-closed")}}))}function xi(){const t=Qn();to(t)}function Ei(){eo(so())}function Zn(){const t=document.querySelector("body");t&&(kt({target:t,cancel:{nativeScrollbarsOverlaid:!0}},{scrollbars:{theme:"scrollbar-base scrollbar-auto py-1",autoHide:"move",autoHideDelay:500,autoHideSuspend:!1}}),document.querySelectorAll("pre").forEach((t=>{kt(t,{scrollbars:{theme:"scrollbar-base scrollbar-dark px-2",autoHide:"leave",autoHideDelay:500,autoHideSuspend:!1}})})))}function Ci(){const t=document.getElementById("banner");t?t.classList.remove("opacity-0","scale-105"):console.error("Failed to find the banner element")}function Wn(){xi(),Ei(),Zn(),Ci()}Cs("display-setting",["display-setting","display-settings-switch"]),Cs("nav-menu-panel",["nav-menu-panel","nav-menu-switch"]),Cs("search-panel",["search-panel","search-bar","search-switch"]),Wn(),document.addEventListener("astro:after-swap",Wn);const Ys=()=>{window.swup.hooks.on("link:click",(()=>{if(document.documentElement.style.setProperty("--content-delay","0ms"),!Vn)return;let t=.3*window.innerHeight-72-16,e=document.getElementById("navbar-wrapper");!e||!document.body.classList.contains("lg:is-home")||(document.body.scrollTop>=t||document.documentElement.scrollTop>=t)&&e.classList.add("navbar-hidden")})),window.swup.hooks.on("content:replace",Zn),window.swup.hooks.on("visit:start",(t=>{const e=document.querySelector("body");no(t.to.url,oo("/"))?e.classList.add("lg:is-home"):e.classList.remove("lg:is-home");const n=document.getElementById("page-height-extend");n&&n.classList.remove("hidden")})),window.swup.hooks.on("page:view",(()=>{const t=document.getElementById("page-height-extend");t&&t.classList.remove("hidden")})),window.swup.hooks.on("visit:end",(t=>{const e=document.getElementById("page-height-extend");e&&e.classList.add("hidden")}))};window?.swup?.hooks?Ys():document.addEventListener("swup:enable",Ys);let We=document.getElementById("back-to-top-btn"),Ue=document.getElementById("navbar-wrapper");function _i(){if(We&&(document.body.scrollTop>600||document.documentElement.scrollTop>600?We.classList.remove("hide"):We.classList.add("hide")),Vn&&Ue){let t=.3*window.innerHeight-72-16;document.body.classList.contains("lg:is-home")&&window.innerWidth>=1024&&(t=.6*window.innerHeight-72-16),document.body.scrollTop>=t||document.documentElement.scrollTop>=t?Ue.classList.add("navbar-hidden"):Ue.classList.remove("navbar-hidden")}}function Li(){"dark"===localStorage.theme?(document.documentElement.classList.remove("dark"),localStorage.theme="light"):(document.documentElement.classList.add("dark"),localStorage.theme="dark")}function Un(){let t=document.getElementById("scheme-switch");t&&t.addEventListener("click",(function(){Li()}));let e=document.getElementById("display-settings-switch");e&&e.addEventListener("click",(function(){let t=document.getElementById("display-setting");t&&t.classList.toggle("float-panel-closed")}));let n=document.getElementById("nav-menu-switch");n&&n.addEventListener("click",(function(){let t=document.getElementById("nav-menu-panel");t&&t.classList.toggle("float-panel-closed")}))}window.onscroll=_i,Un(),document.addEventListener("astro:after-swap",(()=>{Un()}),{once:!1});class Oi extends HTMLElement{constructor(){if(super(),"true"!==this.dataset.isCollapsed)return;const t=this.dataset.id,e=this.querySelector(".expand-btn"),n=this.querySelector(`#${t}`);e.addEventListener("click",(()=>{n.classList.remove("collapsed"),e.classList.add("hidden")}))}}customElements.define("widget-layout",Oi); \ No newline at end of file diff --git a/_astro/hoisted.DP8G5D0j.js b/_astro/hoisted.DP8G5D0j.js deleted file mode 100644 index 89de4a2..0000000 --- a/_astro/hoisted.DP8G5D0j.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as Jn}from"./preload-helper.BiBI96sQ.js";import{b as Qn,c as to,s as eo,g as so}from"./setting-utils.H_x_02w0.js";import{p as no,u as oo}from"./url-utils.Co0GbPFH.js";import"https://artalk.loliko.cn/dist/Artalk.js";import"./zh_TW.Cn8XYgkS.js";const je=new MutationObserver(Js);function Js(){je.disconnect();let t=Array.from(document.querySelectorAll("pre"));for(let e of t){if("DIV"===e.parentElement?.nodeName&&e.parentElement?.classList.contains("code-block"))continue;let t=document.createElement("div");t.className="relative code-block";let n=document.createElement("button");n.className="copy-btn btn-regular-dark absolute active:scale-90 h-8 w-8 top-2 right-2 opacity-75 text-sm p-1.5 rounded-lg transition-all ease-in-out",e.setAttribute("tabindex","0"),e.parentNode&&e.parentNode.insertBefore(t,e);let s,i='',o='';n.innerHTML=`
${i} ${o}
\n `,t.appendChild(e),t.appendChild(n),n.addEventListener("click",(async()=>{s&&clearTimeout(s);let t=e?.querySelector("code")?.innerText;void 0!==t&&(await navigator.clipboard.writeText(t),n.classList.add("success"),s=setTimeout((()=>{n.classList.remove("success")}),1e3))}))}je.observe(document.body,{childList:!0,subtree:!0})}function Jt(t,e,n){const s=document.createElement(e);return t&&(s.className=t),n&&n.appendChild(s),s}function io(t,e,n){let s=`translate3d(${t}px,0px,0)`;return void 0!==n&&(s+=` scale3d(${n},${n},1)`),s}function Ke(t,e,n){t.style.width="number"==typeof e?`${e}px`:e,t.style.height="number"==typeof n?`${n}px`:n}je.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",Js),document.addEventListener("DOMContentLoaded",(function(){Artalk.init({el:"#Comments",server:"https://artalk.loliko.cn/",site:"ittst"}),typeof Swup<"u"&&Swup.on("contentReplaced",(function(){Artalk.init({el:"#Comments",server:"https://artalk.loliko.cn/",site:"ittst"})}))}));const vt={IDLE:"idle",LOADING:"loading",LOADED:"loaded",ERROR:"error"};function co(t){return"button"in t&&1===t.button||t.ctrlKey||t.metaKey||t.altKey||t.shiftKey}function Qt(t,e,n=document){let s=[];if(t instanceof Element)s=[t];else if(t instanceof NodeList||Array.isArray(t))s=Array.from(t);else{const i="string"==typeof t?t:e;i&&(s=Array.from(n.querySelectorAll(i)))}return s}function ro(t){return"function"==typeof t&&t.prototype&&t.prototype.goTo}function Is(){return!(!navigator.vendor||!navigator.vendor.match(/apple/i))}class lo{constructor(t,e){this.type=t,this.defaultPrevented=!1,e&&Object.assign(this,e)}preventDefault(){this.defaultPrevented=!0}}class ao{constructor(){this._listeners={},this._filters={},this.pswp=void 0,this.options=void 0}addFilter(t,e,n=100){var s,i,o;this._filters[t]||(this._filters[t]=[]),null===(s=this._filters[t])||void 0===s||s.push({fn:e,priority:n}),null===(i=this._filters[t])||void 0===i||i.sort(((t,e)=>t.priority-e.priority)),null===(o=this.pswp)||void 0===o||o.addFilter(t,e,n)}removeFilter(t,e){this._filters[t]&&(this._filters[t]=this._filters[t].filter((t=>t.fn!==e))),this.pswp&&this.pswp.removeFilter(t,e)}applyFilters(t,...e){var n;return null===(n=this._filters[t])||void 0===n||n.forEach((t=>{e[0]=t.fn.apply(this,e)})),e[0]}on(t,e){var n,s;this._listeners[t]||(this._listeners[t]=[]),null===(n=this._listeners[t])||void 0===n||n.push(e),null===(s=this.pswp)||void 0===s||s.on(t,e)}off(t,e){var n;this._listeners[t]&&(this._listeners[t]=this._listeners[t].filter((t=>e!==t))),null===(n=this.pswp)||void 0===n||n.off(t,e)}dispatch(t,e){var n;if(this.pswp)return this.pswp.dispatch(t,e);const s=new lo(t,e);return null===(n=this._listeners[t])||void 0===n||n.forEach((t=>{t.call(this,s)})),s}}class ho{constructor(t,e){if(this.element=Jt("pswp__img pswp__img--placeholder",t?"img":"div",e),t){const e=this.element;e.decoding="async",e.alt="",e.src=t,e.setAttribute("role","presentation")}this.element.setAttribute("aria-hidden","true")}setDisplayedSize(t,e){this.element&&("IMG"===this.element.tagName?(Ke(this.element,250,"auto"),this.element.style.transformOrigin="0 0",this.element.style.transform=io(0,0,t/250)):Ke(this.element,t,e))}destroy(){var t;null!==(t=this.element)&&void 0!==t&&t.parentNode&&this.element.remove(),this.element=null}}class uo{constructor(t,e,n){this.instance=e,this.data=t,this.index=n,this.element=void 0,this.placeholder=void 0,this.slide=void 0,this.displayedImageWidth=0,this.displayedImageHeight=0,this.width=Number(this.data.w)||Number(this.data.width)||0,this.height=Number(this.data.h)||Number(this.data.height)||0,this.isAttached=!1,this.hasSlide=!1,this.isDecoding=!1,this.state=vt.IDLE,this.data.type?this.type=this.data.type:this.data.src?this.type="image":this.type="html",this.instance.dispatch("contentInit",{content:this})}removePlaceholder(){this.placeholder&&!this.keepPlaceholder()&&setTimeout((()=>{this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0)}),1e3)}load(t,e){if(this.slide&&this.usePlaceholder())if(this.placeholder){const t=this.placeholder.element;t&&!t.parentElement&&this.slide.container.prepend(t)}else{const t=this.instance.applyFilters("placeholderSrc",!(!this.data.msrc||!this.slide.isFirstSlide)&&this.data.msrc,this);this.placeholder=new ho(t,this.slide.container)}this.element&&!e||this.instance.dispatch("contentLoad",{content:this,isLazy:t}).defaultPrevented||(this.isImageContent()?(this.element=Jt("pswp__img","img"),this.displayedImageWidth&&this.loadImage(t)):(this.element=Jt("pswp__content","div"),this.element.innerHTML=this.data.html||""),e&&this.slide&&this.slide.updateContentSize(!0))}loadImage(t){var e,n;if(!this.isImageContent()||!this.element||this.instance.dispatch("contentLoadImage",{content:this,isLazy:t}).defaultPrevented)return;const s=this.element;this.updateSrcsetSizes(),this.data.srcset&&(s.srcset=this.data.srcset),s.src=null!==(e=this.data.src)&&void 0!==e?e:"",s.alt=null!==(n=this.data.alt)&&void 0!==n?n:"",this.state=vt.LOADING,s.complete?this.onLoaded():(s.onload=()=>{this.onLoaded()},s.onerror=()=>{this.onError()})}setSlide(t){this.slide=t,this.hasSlide=!0,this.instance=t.pswp}onLoaded(){this.state=vt.LOADED,this.slide&&this.element&&(this.instance.dispatch("loadComplete",{slide:this.slide,content:this}),this.slide.isActive&&this.slide.heavyAppended&&!this.element.parentNode&&(this.append(),this.slide.updateContentSize(!0)),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder())}onError(){this.state=vt.ERROR,this.slide&&(this.displayError(),this.instance.dispatch("loadComplete",{slide:this.slide,isError:!0,content:this}),this.instance.dispatch("loadError",{slide:this.slide,content:this}))}isLoading(){return this.instance.applyFilters("isContentLoading",this.state===vt.LOADING,this)}isError(){return this.state===vt.ERROR}isImageContent(){return"image"===this.type}setDisplayedSize(t,e){if(this.element&&(this.placeholder&&this.placeholder.setDisplayedSize(t,e),!this.instance.dispatch("contentResize",{content:this,width:t,height:e}).defaultPrevented&&(Ke(this.element,t,e),this.isImageContent()&&!this.isError()))){const n=!this.displayedImageWidth&&t;this.displayedImageWidth=t,this.displayedImageHeight=e,n?this.loadImage(!1):this.updateSrcsetSizes(),this.slide&&this.instance.dispatch("imageSizeChange",{slide:this.slide,width:t,height:e,content:this})}}isZoomable(){return this.instance.applyFilters("isContentZoomable",this.isImageContent()&&this.state!==vt.ERROR,this)}updateSrcsetSizes(){if(!this.isImageContent()||!this.element||!this.data.srcset)return;const t=this.element,e=this.instance.applyFilters("srcsetSizesWidth",this.displayedImageWidth,this);(!t.dataset.largestUsedSize||e>parseInt(t.dataset.largestUsedSize,10))&&(t.sizes=e+"px",t.dataset.largestUsedSize=String(e))}usePlaceholder(){return this.instance.applyFilters("useContentPlaceholder",this.isImageContent(),this)}lazyLoad(){this.instance.dispatch("contentLazyLoad",{content:this}).defaultPrevented||this.load(!0)}keepPlaceholder(){return this.instance.applyFilters("isKeepingPlaceholder",this.isLoading(),this)}destroy(){this.hasSlide=!1,this.slide=void 0,!this.instance.dispatch("contentDestroy",{content:this}).defaultPrevented&&(this.remove(),this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0),this.isImageContent()&&this.element&&(this.element.onload=null,this.element.onerror=null,this.element=void 0))}displayError(){if(this.slide){var t,e;let n=Jt("pswp__error-msg","div");n.innerText=null!==(t=null===(e=this.instance.options)||void 0===e?void 0:e.errorMsg)&&void 0!==t?t:"",n=this.instance.applyFilters("contentErrorElement",n,this),this.element=Jt("pswp__content pswp__error-msg-container","div"),this.element.appendChild(n),this.slide.container.innerText="",this.slide.container.appendChild(this.element),this.slide.updateContentSize(!0),this.removePlaceholder()}}append(){if(this.isAttached||!this.element)return;if(this.isAttached=!0,this.state===vt.ERROR)return void this.displayError();if(this.instance.dispatch("contentAppend",{content:this}).defaultPrevented)return;const t="decode"in this.element;this.isImageContent()?t&&this.slide&&(!this.slide.isActive||Is())?(this.isDecoding=!0,this.element.decode().catch((()=>{})).finally((()=>{this.isDecoding=!1,this.appendImage()}))):this.appendImage():this.slide&&!this.element.parentNode&&this.slide.container.appendChild(this.element)}activate(){this.instance.dispatch("contentActivate",{content:this}).defaultPrevented||!this.slide||(this.isImageContent()&&this.isDecoding&&!Is()?this.appendImage():this.isError()&&this.load(!1,!0),this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","false"))}deactivate(){this.instance.dispatch("contentDeactivate",{content:this}),this.slide&&this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","true")}remove(){this.isAttached=!1,!this.instance.dispatch("contentRemove",{content:this}).defaultPrevented&&(this.element&&this.element.parentNode&&this.element.remove(),this.placeholder&&this.placeholder.element&&this.placeholder.element.remove())}appendImage(){this.isAttached&&(this.instance.dispatch("contentAppendImage",{content:this}).defaultPrevented||(this.slide&&this.element&&!this.element.parentNode&&this.slide.container.appendChild(this.element),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder()))}}function po(t,e){if(t.getViewportSizeFn){const n=t.getViewportSizeFn(t,e);if(n)return n}return{x:document.documentElement.clientWidth,y:window.innerHeight}}function fe(t,e,n,s,i){let o=0;if(e.paddingFn)o=e.paddingFn(n,s,i)[t];else if(e.padding)o=e.padding[t];else{const n="padding"+t[0].toUpperCase()+t.slice(1);e[n]&&(o=e[n])}return Number(o)||0}function fo(t,e,n,s){return{x:e.x-fe("left",t,e,n,s)-fe("right",t,e,n,s),y:e.y-fe("top",t,e,n,s)-fe("bottom",t,e,n,s)}}const Ts=4e3;class mo{constructor(t,e,n,s){this.pswp=s,this.options=t,this.itemData=e,this.index=n,this.panAreaSize=null,this.elementSize=null,this.fit=1,this.fill=1,this.vFill=1,this.initial=1,this.secondary=1,this.max=1,this.min=1}update(t,e,n){const s={x:t,y:e};this.elementSize=s,this.panAreaSize=n;const i=n.x/s.x,o=n.y/s.y;this.fit=Math.min(1,io?i:o),this.vFill=Math.min(1,o),this.initial=this._getInitial(),this.secondary=this._getSecondary(),this.max=Math.max(this.initial,this.secondary,this._getMax()),this.min=Math.min(this.fit,this.initial,this.secondary),this.pswp&&this.pswp.dispatch("zoomLevelsUpdate",{zoomLevels:this,slideData:this.itemData})}_parseZoomLevelOption(t){const e=t+"ZoomLevel",n=this.options[e];if(n)return"function"==typeof n?n(this):"fill"===n?this.fill:"fit"===n?this.fit:Number(n)}_getSecondary(){let t=this._parseZoomLevelOption("secondary");return t||(t=Math.min(1,3*this.fit),this.elementSize&&t*this.elementSize.x>Ts&&(t=Ts/this.elementSize.x),t)}_getInitial(){return this._parseZoomLevelOption("initial")||this.fit}_getMax(){return this._parseZoomLevelOption("max")||Math.max(1,4*this.fit)}}function Qs(t,e,n){const s=e.createContentFromData(t,n);let i;const{options:o}=e;if(o){let r;i=new mo(o,t,-1),r=e.pswp?e.pswp.viewportSize:po(o,e);const l=fo(o,r,t,n);i.update(s.width,s.height,l)}return s.lazyLoad(),i&&s.setDisplayedSize(Math.ceil(s.width*i.initial),Math.ceil(s.height*i.initial)),s}function go(t,e){const n=e.getItemData(t);if(!e.dispatch("lazyLoadSlide",{index:t,itemData:n}).defaultPrevented)return Qs(n,e,t)}class yo extends ao{getNumItems(){var t;let e=0;const n=null===(t=this.options)||void 0===t?void 0:t.dataSource;n&&"length"in n?e=n.length:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),n.items&&(e=n.items.length));const s=this.dispatch("numItems",{dataSource:n,numItems:e});return this.applyFilters("numItems",s.numItems,n)}createContentFromData(t,e){return new uo(t,this,e)}getItemData(t){var e;const n=null===(e=this.options)||void 0===e?void 0:e.dataSource;let s={};Array.isArray(n)?s=n[t]:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),s=n.items[t]);let i=s;i instanceof Element&&(i=this._domElementToItemData(i));const o=this.dispatch("itemData",{itemData:i||{},index:t});return this.applyFilters("itemData",o.itemData,t)}_getGalleryDOMElements(t){var e,n;return null!==(e=this.options)&&void 0!==e&&e.children||null!==(n=this.options)&&void 0!==n&&n.childSelector?Qt(this.options.children,this.options.childSelector,t)||[]:[t]}_domElementToItemData(t){const e={element:t},n="A"===t.tagName?t:t.querySelector("a");if(n){e.src=n.dataset.pswpSrc||n.href,n.dataset.pswpSrcset&&(e.srcset=n.dataset.pswpSrcset),e.width=n.dataset.pswpWidth?parseInt(n.dataset.pswpWidth,10):0,e.height=n.dataset.pswpHeight?parseInt(n.dataset.pswpHeight,10):0,e.w=e.width,e.h=e.height,n.dataset.pswpType&&(e.type=n.dataset.pswpType);const i=t.querySelector("img");var s;if(i)e.msrc=i.currentSrc||i.src,e.alt=null!==(s=i.getAttribute("alt"))&&void 0!==s?s:"";(n.dataset.pswpCropped||n.dataset.cropped)&&(e.thumbCropped=!0)}return this.applyFilters("domItemData",e,t,n)}lazyLoadData(t,e){return Qs(t,this,e)}}class vo extends yo{constructor(t){super(),this.options=t||{},this._uid=0,this.shouldOpen=!1,this._preloadedContent=void 0,this.onThumbnailsClick=this.onThumbnailsClick.bind(this)}init(){Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.addEventListener("click",this.onThumbnailsClick,!1)}))}onThumbnailsClick(t){if(co(t)||window.pswp)return;let e={x:t.clientX,y:t.clientY};!e.x&&!e.y&&(e=null);let n=this.getClickedIndex(t);n=this.applyFilters("clickedIndex",n,t,this);const s={gallery:t.currentTarget};n>=0&&(t.preventDefault(),this.loadAndOpen(n,s,e))}getClickedIndex(t){if(this.options.getClickedIndexFn)return this.options.getClickedIndexFn.call(this,t);const e=t.target,n=Qt(this.options.children,this.options.childSelector,t.currentTarget).findIndex((t=>t===e||t.contains(e)));return-1!==n?n:this.options.children||this.options.childSelector?-1:0}loadAndOpen(t,e,n){if(window.pswp||!this.options)return!1;if(!e&&this.options.gallery&&this.options.children){const t=Qt(this.options.gallery);t[0]&&(e={gallery:t[0]})}return this.options.index=t,this.options.initialPointerPos=n,this.shouldOpen=!0,this.preload(t,e),!0}preload(t,e){const{options:n}=this;e&&(n.dataSource=e);const s=[],i=typeof n.pswpModule;if(ro(n.pswpModule))s.push(Promise.resolve(n.pswpModule));else{if("string"===i)throw new Error("pswpModule as string is no longer supported");if("function"!==i)throw new Error("pswpModule is not valid");s.push(n.pswpModule())}"function"==typeof n.openPromise&&s.push(n.openPromise()),!1!==n.preloadFirstSlide&&t>=0&&(this._preloadedContent=go(t,this));const o=++this._uid;Promise.all(s).then((t=>{if(this.shouldOpen){const e=t[0];this._openPhotoswipe(e,o)}}))}_openPhotoswipe(t,e){if(e!==this._uid&&this.shouldOpen||(this.shouldOpen=!1,window.pswp))return;const n="object"==typeof t?new t.default(this.options):new t(this.options);this.pswp=n,window.pswp=n,Object.keys(this._listeners).forEach((t=>{var e;null===(e=this._listeners[t])||void 0===e||e.forEach((e=>{n.on(t,e)}))})),Object.keys(this._filters).forEach((t=>{var e;null===(e=this._filters[t])||void 0===e||e.forEach((e=>{n.addFilter(t,e.fn,e.priority)}))})),this._preloadedContent&&(n.contentLoader.addToCache(this._preloadedContent),this._preloadedContent=void 0),n.on("destroy",(()=>{this.pswp=void 0,delete window.pswp})),n.init()}destroy(){var t;null===(t=this.pswp)||void 0===t||t.destroy(),this.shouldOpen=!1,this._listeners={},Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.removeEventListener("click",this.onThumbnailsClick,!1)}))}}let te,wo=Jn((()=>import("./photoswipe.esm.CKijkUPa.js")),[]);function As(){te=new vo({gallery:".custom-md img, #post-cover img",pswpModule:()=>wo,closeSVG:'',zoomSVG:'',padding:{top:20,bottom:20,left:20,right:20},wheelToZoom:!0,arrowPrev:!1,arrowNext:!1,imageClickAction:"close",tapAction:"close",doubleTapAction:"zoom"}),te.addFilter("domItemData",((t,e)=>(e instanceof HTMLImageElement&&(t.src=e.src,t.w=Number(e.naturalWidth||window.innerWidth),t.h=Number(e.naturalHeight||window.innerHeight),t.msrc=e.src),t))),te.init()}const $s=()=>{te||As(),window.swup.hooks.on("page:view",(()=>{As()})),window.swup.hooks.on("content:replace",(()=>{te?.destroy?.()}),{before:!0})};window.swup?$s():document.addEventListener("swup:enable",$s);const pt=(t,e)=>{const{o:n,i:s,u:i}=t;let o,r=n;const l=(t,e)=>{const n=r,l=t,a=e||(s?!s(n,l):n!==l);return(a||i)&&(r=l,o=n),[r,a,o]};return[e?t=>l(e(r,o),t):l,t=>[r,!!t,o]]},bo=typeof window<"u"&&typeof HTMLElement<"u"&&!!window.document,ut=bo?window:{},tn=Math.max,So=Math.min,Ge=Math.round,Se=Math.abs,Ds=Math.sign,en=ut.cancelAnimationFrame,ds=ut.requestAnimationFrame,xe=ut.setTimeout,Xe=ut.clearTimeout,Te=t=>typeof ut[t]<"u"?ut[t]:void 0,xo=Te("MutationObserver"),ks=Te("IntersectionObserver"),Ee=Te("ResizeObserver"),ye=Te("ScrollTimeline"),hs=t=>void 0===t,Ae=t=>null===t,Ct=t=>"number"==typeof t,oe=t=>"string"==typeof t,us=t=>"boolean"==typeof t,wt=t=>"function"==typeof t,_t=t=>Array.isArray(t),Ce=t=>"object"==typeof t&&!_t(t)&&!Ae(t),ps=t=>{const e=!!t&&t.length,n=Ct(e)&&e>-1&&e%1==0;return!!(_t(t)||!wt(t)&&n)&&(!(e>0&&Ce(t))||e-1 in t)},_e=t=>!!t&&t.constructor===Object,Le=t=>t instanceof HTMLElement,$e=t=>t instanceof Element;function K(t,e){if(ps(t))for(let n=0;ne(t[n],n,t)));return t}const sn=(t,e)=>t.indexOf(e)>=0,ee=(t,e)=>t.concat(e),tt=(t,e,n)=>(!oe(e)&&ps(e)?Array.prototype.push.apply(t,e):t.push(e),t),Mt=t=>Array.from(t||[]),fs=t=>_t(t)?t:!oe(t)&&ps(t)?Mt(t):[t],Ye=t=>!!t&&!t.length,Je=t=>Mt(new Set(t)),gt=(t,e,n)=>{K(t,(t=>!t||t.apply(void 0,e||[]))),!n&&(t.length=0)},nn="paddingTop",on="paddingRight",cn="paddingLeft",rn="paddingBottom",ln="marginLeft",an="marginRight",dn="marginBottom",hn="overflowX",un="overflowY",De="width",ke="height",$t="visible",Ht="hidden",Zt="scroll",Eo=t=>{const e=String(t||"");return e?e[0].toUpperCase()+e.slice(1):""},Me=(t,e,n,s)=>{if(t&&e){let s=!0;return K(n,(n=>{t[n]!==e[n]&&(s=!1)})),s}return!1},pn=(t,e)=>Me(t,e,["w","h"]),ve=(t,e)=>Me(t,e,["x","y"]),Co=(t,e)=>Me(t,e,["t","r","b","l"]),zt=()=>{},A=(t,...e)=>t.bind(0,...e),Ft=t=>{let e;const n=t?xe:ds,s=t?Xe:en;return[i=>{s(e),e=n((()=>i()),wt(t)?t():t)},()=>s(e)]},Qe=(t,e)=>{const{_:n,v:s,p:i,S:o}=e||{};let r,l,a,c,d=zt;const h=function(e){d(),Xe(r),c=r=l=void 0,d=zt,t.apply(this,e)},p=t=>o&&l?o(l,t):t,u=()=>{d!==zt&&h(p(a)||a)},m=function(){const t=Mt(arguments),e=wt(n)?n():n;if(Ct(e)&&e>=0){const n=wt(s)?s():s,o=Ct(n)&&n>=0,m=e>0?xe:ds,y=e>0?Xe:en,f=p(t)||t,g=h.bind(0,f);let v;d(),i&&!c?(g(),c=!0,v=m((()=>c=void 0),e)):(v=m(g,e),o&&!r&&(r=xe(u,n))),d=()=>y(v),l=a=f}else h(t)};return m.m=u,m},fn=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),bt=t=>t?Object.keys(t):[],W=(t,e,n,s,i,o,r)=>{const l=[e,n,s,i,o,r];return("object"!=typeof t||Ae(t))&&!wt(t)&&(t={}),K(l,(e=>{K(e,((n,s)=>{const i=e[s];if(t===i)return!0;const o=_t(i);if(i&&_e(i)){const e=t[s];let n=e;o&&!_t(e)?n=[]:!o&&!_e(e)&&(n={}),t[s]=W(n,i)}else t[s]=o?i.slice():i}))})),t},mn=(t,e)=>K(W({},t),((t,e,n)=>{void 0===t?delete n[e]:t&&_e(t)&&(n[e]=mn(t))})),ms=t=>!bt(t).length,gn=(t,e,n)=>tn(t,So(e,n)),Rt=t=>Je((_t(t)?t:(t||"").split(" ")).filter((t=>t))),gs=(t,e)=>t&&t.getAttribute(e),Ms=(t,e)=>t&&t.hasAttribute(e),Ot=(t,e,n)=>{K(Rt(e),(e=>{t&&t.setAttribute(e,String(n||""))}))},xt=(t,e)=>{K(Rt(e),(e=>t&&t.removeAttribute(e)))},Pe=(t,e)=>{const n=Rt(gs(t,e)),s=A(Ot,t,e),i=(t,e)=>{const s=new Set(n);return K(Rt(t),(t=>{s[e](t)})),Mt(s).join(" ")};return{O:t=>s(i(t,"delete")),$:t=>s(i(t,"add")),C:t=>{const e=Rt(t);return e.reduce(((t,e)=>t&&n.includes(e)),e.length>0)}}},yn=(t,e,n)=>(Pe(t,e).O(n),A(ys,t,e,n)),ys=(t,e,n)=>(Pe(t,e).$(n),A(yn,t,e,n)),Oe=(t,e,n,s)=>(s?ys:yn)(t,e,n),vs=(t,e,n)=>Pe(t,e).C(n),vn=t=>Pe(t,"class"),wn=(t,e)=>{vn(t).O(e)},ws=(t,e)=>(vn(t).$(e),A(wn,t,e)),bn=(t,e)=>{const n=e?$e(e)&&e:document;return n?Mt(n.querySelectorAll(t)):[]},_o=(t,e)=>{const n=e?$e(e)&&e:document;return n&&n.querySelector(t)},ts=(t,e)=>$e(t)&&t.matches(e),Sn=t=>ts(t,"body"),es=t=>t?Mt(t.childNodes):[],se=t=>t&&t.parentElement,Nt=(t,e)=>$e(t)&&t.closest(e),ss=t=>document.activeElement,Lo=(t,e,n)=>{const s=Nt(t,e),i=t&&_o(n,s),o=Nt(i,e)===s;return!(!s||!i)&&(s===t||i===t||o&&Nt(Nt(t,n),e)!==s)},Wt=t=>{K(fs(t),(t=>{const e=se(t);t&&e&&e.removeChild(t)}))},ft=(t,e)=>A(Wt,t&&e&&K(fs(e),(e=>{e&&t.appendChild(e)}))),Bt=t=>{const e=document.createElement("div");return Ot(e,"class",t),e},xn=t=>{const e=Bt();return e.innerHTML=t.trim(),K(es(e),(t=>Wt(t)))},Ps=(t,e)=>t.getPropertyValue(e)||t[e]||"",En=t=>{const e=t||0;return isFinite(e)?e:0},me=t=>En(parseFloat(t||"")),ns=t=>Math.round(1e4*t)/1e4,Cn=t=>`${ns(En(t))}px`;function ne(t,e){t&&e&&K(e,((e,n)=>{try{const s=t.style,i=Ae(e)||us(e)?"":Ct(e)?Cn(e):e;0===n.indexOf("--")?s.setProperty(n,i):s[n]=i}catch{}}))}function Tt(t,e,n){const s=oe(e);let i=s?"":{};if(t){const o=ut.getComputedStyle(t,n)||t.style;i=s?Ps(o,e):Mt(e).reduce(((t,e)=>(t[e]=Ps(o,e),t)),i)}return i}const Hs=(t,e,n)=>{const s=e?`${e}-`:"",i=n?`-${n}`:"",o=`${s}top${i}`,r=`${s}right${i}`,l=`${s}bottom${i}`,a=`${s}left${i}`,c=Tt(t,[o,r,l,a]);return{t:me(c[o]),r:me(c[r]),b:me(c[l]),l:me(c[a])}},Oo=(t,e)=>"translate"+(Ce(t)?`(${t.x},${t.y})`:`Y(${t})`),Io=t=>!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length),To={w:0,h:0},He=(t,e)=>e?{w:e[`${t}Width`],h:e[`${t}Height`]}:To,Ao=t=>He("inner",t||ut),Vt=A(He,"offset"),_n=A(He,"client"),Ie=A(He,"scroll"),bs=t=>{const e=parseFloat(Tt(t,De))||0,n=parseFloat(Tt(t,ke))||0;return{w:e-Ge(e),h:n-Ge(n)}},Be=t=>t.getBoundingClientRect(),$o=t=>!!t&&Io(t),os=t=>!(!t||!t[ke]&&!t[De]),Ln=(t,e)=>{const n=os(t);return!os(e)&&n},zs=(t,e,n,s)=>{K(Rt(e),(e=>{t&&t.removeEventListener(e,n,s)}))},Y=(t,e,n,s)=>{var i;const o=null==(i=s&&s.H)||i,r=s&&s.I||!1,l=s&&s.A||!1,a={passive:o,capture:r};return A(gt,Rt(e).map((e=>{const s=l?i=>{zs(t,e,s,r),n&&n(i)}:n;return t&&t.addEventListener(e,s,a),A(zs,t,e,s,r)})))},On=t=>t.stopPropagation(),is=t=>t.preventDefault(),In=t=>On(t)||is(t),Et=(t,e)=>{const{x:n,y:s}=Ct(e)?{x:e,y:e}:e||{};Ct(n)&&(t.scrollLeft=n),Ct(s)&&(t.scrollTop=s)},mt=t=>({x:t.scrollLeft,y:t.scrollTop}),Tn=()=>({D:{x:0,y:0},M:{x:0,y:0}}),Do=(t,e)=>{const{D:n,M:s}=t,{w:i,h:o}=e,r=(t,e,n)=>{let s=Ds(t)*n,i=Ds(e)*n;if(s===i){const n=Se(t),o=Se(e);i=n>o?0:i,s=n{const n=(t,e)=>0===t&&t<=e;return{x:n(t.x,e.x),y:n(t.y,e.y)}},qs=({D:t,M:e},n)=>{const s=(t,e,n)=>gn(0,1,(t-n)/(t-e)||0);return{x:s(t.x,e.x,n.x),y:s(t.y,e.y,n.y)}},cs=t=>{t&&t.focus&&t.focus({preventScroll:!0})},Fs=(t,e)=>{K(fs(e),t)},rs=t=>{const e=new Map,n=(t,n)=>{if(t){const s=e.get(t);Fs((t=>{s&&s[t?"delete":"clear"](t)}),n)}else e.forEach((t=>{t.clear()})),e.clear()},s=(t,i)=>{if(oe(t)){const s=e.get(t)||new Set;return e.set(t,s),Fs((t=>{wt(t)&&s.add(t)}),i),A(n,t,i)}us(i)&&i&&n();const o=bt(t),r=[];return K(o,(e=>{const n=t[e];n&&tt(r,s(e,n))})),A(gt,r)};return s(t||{}),[s,n,(t,n)=>{K(Mt(e.get(t)),(t=>{n&&!Ye(n)?t.apply(0,n):t()}))}]},Ns=t=>JSON.stringify(t,((t,e)=>{if(wt(e))throw 0;return e})),Bs=(t,e)=>t?`${e}`.split(".").reduce(((t,e)=>t&&fn(t,e)?t[e]:void 0),t):void 0,ko={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},An=(t,e)=>{const n={};return K(ee(bt(e),bt(t)),(s=>{const i=t[s],o=e[s];if(Ce(i)&&Ce(o))W(n[s]={},An(i,o)),ms(n[s])&&delete n[s];else if(fn(e,s)&&o!==i){let t=!0;if(_t(i)||_t(o))try{Ns(i)===Ns(o)&&(t=!1)}catch{}t&&(n[s]=o)}})),n},Vs=(t,e,n)=>s=>[Bs(t,s),n||void 0!==Bs(e,s)],jt="data-overlayscrollbars",we="os-environment",ge=`${we}-scrollbar-hidden`,Ve=`${jt}-initialize`,be="noClipping",Zs=`${jt}-body`,Dt=jt,Mo="host",It=`${jt}-viewport`,Po=hn,Ho=un,zo="arrange",$n="measuring",Ro="scrolling",Dn="scrollbarHidden",qo="noContent",ls=`${jt}-padding`,Ws=`${jt}-content`,Ss="os-size-observer",Fo=`${Ss}-appear`,No=`${Ss}-listener`,Bo="os-trinsic-observer",Vo="os-theme-none",yt="os-scrollbar",Zo=`${yt}-rtl`,Wo=`${yt}-horizontal`,Uo=`${yt}-vertical`,kn=`${yt}-track`,xs=`${yt}-handle`,jo=`${yt}-visible`,Ko=`${yt}-cornerless`,Us=`${yt}-interaction`,js=`${yt}-unusable`,as=`${yt}-auto-hide`,Ks=`${as}-hidden`,Gs=`${yt}-wheel`,Go=`${kn}-interactive`,Xo=`${xs}-interactive`;let Mn;const Yo=()=>Mn,Jo=t=>{Mn=t};let Ze;const Qo=()=>{const t=(t,e,n)=>{ft(document.body,t),ft(document.body,t);const s=_n(t),i=Vt(t),o=bs(e);return n&&Wt(t),{x:i.h-s.h+o.h,y:i.w-s.w+o.w}},e=xn(`
`)[0],n=e.firstChild,s=e.lastChild,i=Yo();i&&(s.nonce=i);const[o,,r]=rs(),[l,a]=pt({o:t(e,n),i:ve},A(t,e,n,!0)),[c]=a(),d=(t=>{let e=!1;const n=ws(t,ge);try{e="none"===Tt(t,"scrollbar-width")||"none"===Tt(t,"display","::-webkit-scrollbar")}catch{}return n(),e})(e),h={x:0===c.x,y:0===c.y},p={elements:{host:null,padding:!d,viewport:t=>d&&Sn(t)&&t,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},u=W({},ko),m=A(W,{},u),y=A(W,{},p),f={T:c,k:h,R:d,V:!!ye,L:A(o,"r"),U:y,P:t=>W(p,t)&&y(),N:m,q:t=>W(u,t)&&m(),B:W({},p),F:W({},u)};if(xt(e,"style"),Wt(e),Y(ut,"resize",(()=>{r("r",[])})),wt(ut.matchMedia)&&!d&&(!h.x||!h.y)){const t=e=>{const n=ut.matchMedia(`(resolution: ${ut.devicePixelRatio}dppx)`);Y(n,"change",(()=>{e(),t(e)}),{A:!0})};t((()=>{const[t,e]=l();W(f.T,t),r("r",[e])}))}return f},Lt=()=>(Ze||(Ze=Qo()),Ze),Pn=(t,e)=>wt(e)?e.apply(0,t):e,ti=(t,e,n,s)=>{const i=hs(s)?n:s;return Pn(t,i)||e.apply(0,t)},Hn=(t,e,n,s)=>{const i=hs(s)?n:s,o=Pn(t,i);return!!o&&(Le(o)?o:e.apply(0,t))},ei=(t,e)=>{const{nativeScrollbarsOverlaid:n,body:s}=e||{},{k:i,R:o,U:r}=Lt(),{nativeScrollbarsOverlaid:l,body:a}=r().cancel,c=n??l,d=hs(s)?a:s,h=(i.x||i.y)&&c,p=t&&(Ae(d)?!o:d);return!!h||!!p},Es=new WeakMap,si=(t,e)=>{Es.set(t,e)},ni=t=>{Es.delete(t)},zn=t=>Es.get(t),oi=(t,e,n)=>{let s=!1;const i=!!n&&new WeakMap,o=o=>{if(i&&n){K(n.map((e=>{const[n,s]=e||[];return[s&&n?(o||bn)(n,t):[],s]})),(n=>K(n[0],(o=>{const r=n[1],l=i.get(o)||[];if(t.contains(o)&&r){const t=Y(o,r,(n=>{s?(t(),i.delete(o)):e(n)}));i.set(o,tt(l,t))}else gt(l),i.delete(o)}))))}};return o(),[()=>{s=!0},o]},Xs=(t,e,n,s)=>{let i=!1;const{j:o,X:r,Y:l,W:a,J:c,G:d}=s||{},h=Qe((()=>i&&n(!0)),{_:33,v:99}),[p,u]=oi(t,h,l),m=r||[],y=ee(o||[],m),f=(i,o)=>{if(!Ye(o)){const r=c||zt,l=d||zt,h=[],p=[];let y=!1,f=!1;if(K(o,(n=>{const{attributeName:i,target:o,type:c,oldValue:d,addedNodes:u,removedNodes:g}=n,v="attributes"===c,w="childList"===c,b=t===o,x=v&&i,E=x&&gs(o,i||""),A=oe(E)?E:null,L=x&&d!==A,S=sn(m,i)&&L;if(e&&(w||!b)){const e=v&&L,c=e&&a&&ts(o,a),p=(c?!r(o,i,d,A):!v||e)&&!l(n,!!c,t,s);K(u,(t=>tt(h,t))),K(g,(t=>tt(h,t))),f=f||p}!e&&b&&L&&!r(o,i,d,A)&&(tt(p,i),y=y||S)})),u((t=>Je(h).reduce(((e,n)=>(tt(e,bn(t,n)),ts(n,t)?tt(e,n):e)),[]))),e)return!i&&f&&n(!1),[!1];if(!Ye(p)||y){const t=[Je(p),y];return!i&&n.apply(0,t),t}}},g=new xo(A(f,!1));return[()=>(g.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,()=>{i&&(p(),g.disconnect(),i=!1)}),()=>{if(i)return h.m(),f(!0,g.takeRecords())}]},Rn={},qn={},ii=t=>{K(t,(t=>K(t,((e,n)=>{Rn[n]=t[n]}))))},Fn=(t,e,n)=>bt(t).map((s=>{const{static:i,instance:o}=t[s],[r,l,a]=n||[],c=n?o:i;if(c){const t=n?c(r,l,e):c(e);return(a||qn)[s]=t}})),ie=t=>qn[t],ci="__osOptionsValidationPlugin",ri="__osSizeObserverPlugin",li=(t,e)=>{const{k:n}=e,[s,i]=t("showNativeOverlaidScrollbars");return[s&&n.x&&n.y,i]},Ut=t=>0===t.indexOf($t),ai=(t,e)=>{const n=(t,e,n,s)=>{const i=t===$t?Ht:t.replace(`${$t}-`,""),o=Ut(t),r=Ut(n);return e||s?o&&r?$t:o?e&&s?i:e?$t:Ht:e?i:r&&s?$t:Ht:Ht},s={x:n(e.x,t.x,e.y,t.y),y:n(e.y,t.y,e.x,t.x)};return{K:s,Z:{x:s.x===Zt,y:s.y===Zt}}},Nn="__osScrollbarsHidingPlugin",di="__osClickScrollPlugin",Bn=(t,e,n)=>{const{dt:s}=n||{},i=ie(ri),[o]=pt({o:!1,u:!0});return()=>{const n=[],r=xn(`
`)[0],l=r.firstChild,a=t=>{let n=!1,s=!1;if(t instanceof ResizeObserverEntry){const[e,,i]=o(t.contentRect),r=os(e);s=Ln(e,i),n=!s&&!r}else s=!0===t;n||e({ft:!0,dt:s})};if(Ee){const t=new Ee((t=>a(t.pop())));t.observe(l),tt(n,(()=>{t.disconnect()}))}else{if(!i)return zt;{const[t,e]=i(l,a,s);tt(n,ee([ws(r,Fo),Y(r,"animationstart",t)],e))}}return A(gt,tt(n,ft(t,r)))}},hi=(t,e)=>{let n;const s=Bt(Bo),[i]=pt({o:!1}),o=(t,n)=>{if(t){const s=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=s;return o&&!n&&e(s)&&[s]}},r=(t,e)=>o(e.pop(),t);return[()=>{const e=[];if(ks)n=new ks(A(r,!1),{root:t}),n.observe(s),tt(e,(()=>{n.disconnect()}));else{const t=()=>{const t=Vt(s);o(t)};tt(e,Bn(s,t)()),t()}return A(gt,tt(e,ft(t,s)))},()=>n&&r(!0,n.takeRecords())]},ui=(t,e,n,s)=>{let i,o,r,l,a,c;const d=`[${Dt}]`,h=`[${It}]`,p=["id","class","style","open","wrap","cols","rows"],{vt:u,ht:m,ot:y,gt:f,bt:g,nt:v,wt:w,yt:b,St:x,Ot:E}=t,A=t=>"rtl"===Tt(t,"direction"),L={$t:!1,ct:A(u)},S=Lt(),I=ie(Nn),[C]=pt({i:pn,o:{w:0,h:0}},(()=>{const s=I&&I.tt(t,e,L,S,n).ut,i=!(w&&v)&&vs(m,Dt,be),o=!v&&b(zo),r=o&&mt(f),l=r&&E(),a=x($n,i),c=o&&s&&s()[0],d=Ie(y),h=bs(y);return c&&c(),Et(f,r),l&&l(),i&&a(),{w:d.w+h.w,h:d.h+h.h}})),_=Qe(s,{_:()=>i,v:()=>o,S(t,e){const[n]=t,[s]=e;return[ee(bt(n),bt(s)).reduce(((t,e)=>(t[e]=n[e]||s[e],t)),{})]}}),D=t=>{const e=A(u);W(t,{Ct:c!==e}),W(L,{ct:e}),c=e},k=(t,e)=>{const[n,i]=t,o={xt:i};return W(L,{$t:n}),!e&&s(o),o},T=({ft:t,dt:e})=>{const n=t&&!e||!S.R?s:_,i={ft:t||e,dt:e};D(i),n(i)},O=(t,e)=>{const[,n]=C(),i={Ht:n};return D(i),n&&!e&&(t?s:_)(i),i},$=(t,e,n)=>{const s={Et:e};return D(s),e&&!n&&_(s),s},[M,z]=g?hi(m,k):[],H=!v&&Bn(m,T,{dt:!0}),[R,P]=Xs(m,!1,$,{X:p,j:p}),q=v&&Ee&&new Ee((t=>{const e=t[t.length-1].contentRect;T({ft:!0,dt:Ln(e,a)}),a=e})),F=Qe((()=>{const[,t]=C();s({Ht:t})}),{_:222,p:!0});return[()=>{q&&q.observe(m);const t=H&&H(),e=M&&M(),n=R(),s=S.L((t=>{t?_({zt:t}):F()}));return()=>{q&&q.disconnect(),t&&t(),e&&e(),l&&l(),n(),s()}},({It:t,At:e,Dt:n})=>{const s={},[a]=t("update.ignoreMutation"),[c,u]=t("update.attributes"),[m,f]=t("update.elementEvents"),[w,b]=t("update.debounce"),x=e||n;if(f||u){r&&r(),l&&l();const[t,e]=Xs(g||y,!0,O,{j:ee(p,c||[]),Y:m,W:d,G:(t,e)=>{const{target:n,attributeName:s}=t;return!(e||!s||v)&&Lo(n,d,h)||!!Nt(n,`.${yt}`)||!!(t=>wt(a)&&a(t))(t)}});l=t(),r=e}if(b)if(_.m(),_t(w)){const t=w[0],e=w[1];i=Ct(t)&&t,o=Ct(e)&&e}else Ct(w)?(i=w,o=!1):(i=!1,o=!1);if(x){const t=P(),e=z&&z(),n=r&&r();t&&W(s,$(t[0],t[1],x)),e&&W(s,k(e[0],x)),n&&W(s,O(n[0],x))}return D(s),s},L]},pi=(t,e,n,s)=>{const i="--os-viewport-percent",o="--os-scroll-percent",r="--os-scroll-direction",{U:l}=Lt(),{scrollbars:a}=l(),{slot:c}=a,{vt:d,ht:h,ot:p,Mt:u,gt:m,wt:y,nt:f}=e,{scrollbars:g}=u?{}:t,{slot:v}=g||{},w=[],b=[],x=[],E=Hn([d,h,p],(()=>f&&y?d:h),c,v),L=t=>{if(ye){const e=new ye({source:m,axis:t});return{kt:t=>{const n=t.Tt.animate({clear:["left"],[o]:[0,1]},{timeline:e});return()=>n.cancel()}}}},S={x:L("x"),y:L("y")},I=(t,e,n)=>{const s=n?ws:wn;K(t,(t=>{s(t.Tt,e)}))},C=(t,e)=>{K(t,(t=>{const[n,s]=e(t);ne(n,s)}))},_=(t,e,n)=>{const s=us(n),i=!s||!n;(!s||n)&&I(b,t,e),i&&I(x,t,e)},D=t=>{const e=t?"x":"y",n=Bt(`${yt} ${t?Wo:Uo}`),i=Bt(kn),o=Bt(xs),r={Tt:n,Ut:i,Pt:o},l=S[e];return tt(t?b:x,r),tt(w,[ft(n,i),ft(i,o),A(Wt,n),l&&l.kt(r),s(r,_,t)]),r},k=A(D,!0),T=A(D,!1);return k(),T(),[{Nt:()=>{const t=(()=>{const{Rt:t,Vt:e}=n,s=(t,e)=>gn(0,1,t/(t+e)||0);return{x:s(e.x,t.x),y:s(e.y,t.y)}})(),e=t=>e=>[e.Tt,{[i]:ns(t)+""}];C(b,e(t.x)),C(x,e(t.y))},qt:()=>{if(!ye){const{Lt:t}=n,e=qs(t,mt(m)),s=t=>e=>[e.Tt,{[o]:ns(t)+""}];C(b,s(e.x)),C(x,s(e.y))}},Bt:()=>{const{Lt:t}=n,e=Rs(t),s=t=>e=>[e.Tt,{[r]:t?"0":"1"}];C(b,s(e.x)),C(x,s(e.y))},Ft:()=>{if(f&&!y){const{Rt:t,Lt:e}=n,s=Rs(e),i=qs(e,mt(m)),o=e=>{const{Tt:n}=e,o=se(n)===p&&n,r=(t,e,n)=>{const s=e*t;return Cn(n?s:-s)};return[o,o&&{transform:Oo({x:r(i.x,t.x,s.x),y:r(i.y,t.y,s.y)})}]};C(b,o),C(x,o)}},jt:_,Xt:{Yt:b,Wt:k,Jt:A(C,b)},Gt:{Yt:x,Wt:T,Jt:A(C,x)}},()=>(ft(E,b[0].Tt),ft(E,x[0].Tt),A(gt,w))]},fi=(t,e,n,s)=>(i,o,r)=>{const{ht:l,ot:a,nt:c,gt:d,Kt:h,Ot:p}=e,{Tt:u,Ut:m,Pt:y}=i,[f,g]=Ft(333),[v,w]=Ft(444),b=t=>{wt(d.scrollBy)&&d.scrollBy({behavior:"smooth",left:t.x,top:t.y})};let x=!0;return A(gt,[Y(y,"pointermove pointerleave",s),Y(u,"pointerenter",(()=>{o(Us,!0)})),Y(u,"pointerleave pointercancel",(()=>{o(Us,!1)})),!c&&Y(u,"mousedown",(()=>{const t=ss();(Ms(t,It)||Ms(t,Dt)||t===document.body)&&xe(A(cs,a),25)})),Y(u,"wheel",(t=>{const{deltaX:e,deltaY:n,deltaMode:s}=t;x&&0===s&&se(u)===l&&b({x:e,y:n}),x=!1,o(Gs,!0),f((()=>{x=!0,o(Gs)})),is(t)}),{H:!1,I:!0}),Y(u,"pointerdown",A(Y,h,"click",In,{A:!0,I:!0,H:!1}),{I:!0}),(()=>{const e="pointerup pointercancel lostpointercapture",s="client"+(r?"X":"Y"),i=r?De:ke,o=r?"left":"top",l=r?"w":"h",a=r?"x":"y",c=[];return Y(m,"pointerdown",(r=>{const u=Nt(r.target,`.${xs}`)===y,f=u?y:m,g=t.scrollbars,x=g[u?"dragScroll":"clickScroll"],{button:E,isPrimary:L,pointerType:S}=r,{pointers:I}=g;if(0===E&&L&&x&&(I||[]).includes(S)){gt(c),w();const t=!u&&(r.shiftKey||"instant"===x),g=A(Be,y),E=A(Be,m),L=(t,e)=>(t||g())[o]-(e||E())[o],S=Ge(Be(d)[i])/Vt(d)[l]||1,I=((t,e)=>s=>{const{Rt:i}=n,o=Vt(m)[l]-Vt(y)[l],r=e*s/o*i[a];Et(d,{[a]:t+r})})(mt(d)[a],1/S),C=r[s],_=g(),D=E(),k=_[i],T=L(_,D)+k/2,O=C-D[o],$=u?0:O-T,M=t=>{gt(H),f.releasePointerCapture(t.pointerId)},W=u||t,z=p(),H=[Y(h,e,M),Y(h,"selectstart",(t=>is(t)),{H:!1}),Y(m,e,M),W&&Y(m,"pointermove",(t=>I($+(t[s]-C)))),W&&(()=>{const t=mt(d);z();const e=mt(d),n={x:e.x-t.x,y:e.y-t.y};(Se(n.x)>3||Se(n.y)>3)&&(p(),Et(d,t),b(n),v(z))})];if(f.setPointerCapture(r.pointerId),t)I($);else if(!u){const t=ie(di);if(t){const e=t(I,$,k,(t=>{t?z():tt(H,z)}));tt(H,e),tt(c,A(e,!0))}}}}))})(),g,w])},mi=(t,e,n,s,i,o)=>{let r,l,a,c,d,h=zt,p=0;const u=t=>"mouse"===t.pointerType,[m,y]=Ft(),[f,g]=Ft(100),[v,w]=Ft(100),[b,x]=Ft((()=>p)),[E,L]=pi(t,i,s,fi(e,i,s,(t=>u(t)&&M()))),{ht:S,Qt:I,wt:C}=i,{jt:_,Nt:D,qt:k,Bt:T,Ft:O}=E,$=(t,e)=>{if(x(),t)_(Ks);else{const t=A(_,Ks,!0);p>0&&!e?b(t):t()}},M=()=>{(a?!r:!c)&&($(!0),f((()=>{$(!1)})))},W=t=>{_(as,t,!0),_(as,t,!1)},z=t=>{u(t)&&(r=a,a&&$(!0))},H=[x,g,w,y,()=>h(),Y(S,"pointerover",z,{A:!0}),Y(S,"pointerenter",z),Y(S,"pointerleave",(t=>{u(t)&&(r=!1,a&&$(!1))})),Y(S,"pointermove",(t=>{u(t)&&l&&M()})),Y(I,"scroll",(t=>{m((()=>{k(),M()})),o(t),O()}))];return[()=>A(gt,tt(H,L())),({It:t,Dt:e,Zt:i,tn:o})=>{const{nn:r,sn:u,en:m,cn:y}=o||{},{Ct:f,dt:g}=i||{},{ct:w}=n,{k:b}=Lt(),{K:x,rn:E}=s,[L,S]=t("showNativeOverlaidScrollbars"),[M,z]=t("scrollbars.theme"),[H,R]=t("scrollbars.visibility"),[P,q]=t("scrollbars.autoHide"),[F,N]=t("scrollbars.autoHideSuspend"),[K]=t("scrollbars.autoHideDelay"),[B,Z]=t("scrollbars.dragScroll"),[j,V]=t("scrollbars.clickScroll"),[U,G]=t("overflow"),Q=g&&!e,J=E.x||E.y,X=r||u||y||f||e,tt=m||R||G,et=L&&b.x&&b.y,nt=(t,e,n)=>{const s=t.includes(Zt)&&(H===$t||"auto"===H&&e===Zt);return _(jo,s,n),s};if(p=K,Q&&(F&&J?(W(!1),h(),v((()=>{h=Y(I,"scroll",A(W,!0),{A:!0})}))):W(!0)),S&&_(Vo,et),z&&(_(d),_(M,!0),d=M),N&&!F&&W(!0),q&&(l="move"===P,a="leave"===P,c="never"===P,$(c,!0)),Z&&_(Xo,B),V&&_(Go,!!j),tt){const t=nt(U.x,x.x,!0),e=nt(U.y,x.y,!1);_(Ko,!(t&&e))}X&&(k(),D(),O(),y&&T(),_(js,!E.x,!0),_(js,!E.y,!1),_(Zo,w&&!C))},{},E]},gi=t=>{const e=Lt(),{U:n,R:s}=e,{elements:i}=n(),{padding:o,viewport:r,content:l}=i,a=Le(t),c=a?{}:t,{elements:d}=c,{padding:h,viewport:p,content:u}=d||{},m=a?t:c.target,y=Sn(m),f=m.ownerDocument,g=f.documentElement,v=()=>f.defaultView||ut,w=A(ti,[m]),b=A(Hn,[m]),x=A(Bt,""),E=A(w,x,r),L=A(b,x,l),S=E(p),I=S===m,C=I&&y,_=!I&&L(u),D=!I&&S===_,k=C?g:S,T=C?k:m,O=!I&&b(x,o,h),$=!D&&_,M=[$,k,O,T].map((t=>Le(t)&&!se(t)&&t)),W=t=>t&&sn(M,t),z=!W(k)&&(t=>{const e=Vt(t),n=Ie(t),s=Tt(t,hn),i=Tt(t,un);return n.w-e.w>0&&!Ut(s)||n.h-e.h>0&&!Ut(i)})(k)?k:m,H=C?g:k,R={vt:m,ht:T,ot:k,ln:O,bt:$,gt:H,Qt:C?f:k,an:y?g:z,Kt:f,wt:y,Mt:a,nt:I,un:v,yt:t=>vs(k,It,t),St:(t,e)=>Oe(k,It,t,e),Ot:()=>Oe(H,It,Ro,!0)},{vt:P,ht:q,ln:F,ot:N,bt:K}=R,B=[()=>{xt(q,[Dt,Ve]),xt(P,Ve),y&&xt(g,[Ve,Dt])}];let Z=es([K,N,F,q,P].find((t=>t&&!W(t))));const j=C?P:K||N,V=A(gt,B);return[R,()=>{const t=v(),e=ss(),n=t=>{ft(se(t),es(t)),Wt(t)},i=t=>Y(t,"focusin focusout focus blur",In,{I:!0,H:!1}),o="tabindex",r=gs(N,o),l=i(e);return Ot(q,Dt,I?"":Mo),Ot(F,ls,""),Ot(N,It,""),Ot(K,Ws,""),I||(Ot(N,o,r||"-1"),y&&Ot(g,Zs,"")),ft(j,Z),ft(q,F),ft(F||q,!I&&N),ft(N,K),tt(B,[l,()=>{const t=ss(),e=W(N),s=e&&t===N?P:t,l=i(s);xt(F,ls),xt(K,Ws),xt(N,It),y&&xt(g,Zs),r?Ot(N,o,r):xt(N,o),W(K)&&n(K),e&&n(N),W(F)&&n(F),cs(s),l()}]),s&&!I&&(ys(N,It,Dn),tt(B,A(xt,N,It))),cs(!I&&y&&e===P&&t.top===t?N:e),l(),Z=0,V},V]},yi=({bt:t})=>({Zt:e,_n:n,Dt:s})=>{const{xt:i}=e||{},{$t:o}=n;t&&(i||s)&&ne(t,{[ke]:o&&"100%"})},vi=({ht:t,ln:e,ot:n,nt:s},i)=>{const[o,r]=pt({i:Co,o:Hs()},A(Hs,t,"padding",""));return({It:t,Zt:l,_n:a,Dt:c})=>{let[d,h]=r(c);const{R:p}=Lt(),{ft:u,Ht:m,Ct:y}=l||{},{ct:f}=a,[g,v]=t("paddingAbsolute");(u||h||c||m)&&([d,h]=o(c));const w=!s&&(v||y||h);if(w){const t=!g||!e&&!p,s=d.r+d.l,o=d.t+d.b,r={[an]:t&&!f?-s:0,[dn]:t?-o:0,[ln]:t&&f?-s:0,top:t?-d.t:0,right:t?f?-d.r:"auto":0,left:t?f?"auto":-d.l:0,[De]:t&&`calc(100% + ${s}px)`},l={[nn]:t?d.t:0,[on]:t?d.r:0,[rn]:t?d.b:0,[cn]:t?d.l:0};ne(e||n,r),ne(n,l),W(i,{ln:d,dn:!t,rt:e?l:W({},r,l)})}return{fn:w}}},wi=(t,e)=>{const n=Lt(),{ht:s,ln:i,ot:o,nt:r,Qt:l,gt:a,wt:c,St:d,un:h}=t,{R:p}=n,u=c&&r,m=A(tn,0),y={display:()=>!1,direction:t=>"ltr"!==t,flexDirection:t=>t.endsWith("-reverse"),writingMode:t=>"horizontal-tb"!==t},f=bt(y),g={i:pn,o:{w:0,h:0}},v={i:ve,o:{}},w=t=>{d($n,!u&&t)},[b,x]=pt(g,A(bs,o)),[E,L]=pt(g,A(Ie,o)),[S,I]=pt(g),[C]=pt(v),[_,D]=pt(g),[k]=pt(v),[T]=pt({i:(t,e)=>Me(t,e,f),o:{}},(()=>$o(o)?Tt(o,f):{})),[O,$]=pt({i:(t,e)=>ve(t.D,e.D)&&ve(t.M,e.M),o:Tn()}),M=ie(Nn),z=(t,e)=>`${e?Po:Ho}${Eo(t)}`;return({It:r,Zt:c,_n:g,Dt:v},{fn:A})=>{const{ft:H,Ht:R,Ct:P,dt:q,zt:F}=c||{},N=M&&M.tt(t,e,g,n,r),{it:K,ut:B,_t:Z}=N||{},[j,V]=li(r,n),[U,G]=r("overflow"),Q=Ut(U.x),J=Ut(U.y);let X=x(v),tt=L(v),et=I(v),nt=D(v);V&&p&&d(Dn,!j);{vs(s,Dt,be)&&w(!0);const[t]=B?B():[],[e]=X=b(v),[n]=tt=E(v),i=_n(o),r=u&&Ao(h()),l={w:m(n.w+e.w),h:m(n.h+e.h)},a={w:m((r?r.w:i.w+m(i.w-n.w))+e.w),h:m((r?r.h:i.h+m(i.h-n.h))+e.h)};t&&t(),nt=_(a),et=S(((t,e)=>{const n=ut.devicePixelRatio%1!=0?1:0,s={w:m(t.w-e.w),h:m(t.h-e.h)};return{w:s.w>n?s.w:0,h:s.h>n?s.h:0}})(l,a),v)}const[st,it]=nt,[ot,rt]=et,[lt,at]=tt,[ct,dt]=X,[ht,pt]=C({x:ot.w>0,y:ot.h>0}),yt=Q&&J&&(ht.x||ht.y)||Q&&ht.x&&!ht.y||J&&ht.y&&!ht.x,ft=A||P||F||dt||at||it||rt||G||V||!0,gt=ai(ht,U),[vt,wt]=k(gt.K),[xt,At]=T(v),Lt=P||q||At||pt||v,[St,It]=Lt?O((t=>{if(!f.some((e=>{const n=t[e];return n&&y[e](n)})))return{D:{x:0,y:0},M:{x:1,y:1}};w(!0);const e=mt(a),n=d(qo,!0),s=Y(l,Zt,(t=>{const n=mt(a);t.isTrusted&&n.x===e.x&&n.y===e.y&&On(t)}),{I:!0,A:!0});Et(a,{x:0,y:0}),n();const i=mt(a),o=Ie(a);Et(a,{x:o.w,y:o.h});const r=mt(a);Et(a,{x:r.x-i.x<1&&-o.w,y:r.y-i.y<1&&-o.h});const c=mt(a);return Et(a,e),ds((()=>s())),{D:i,M:c}})(xt),v):$();return ft&&(wt&&(t=>{const e=t=>[$t,Ht,Zt].map((e=>z(e,t))),n=e(!0).concat(e()).join(" ");d(n),d(bt(t).map((e=>z(t[e],"x"===e))).join(" "),!0)})(gt.K),Z&&K&&ne(o,Z(gt,g,K(gt,lt,ct)))),w(!1),Oe(s,Dt,be,yt),Oe(i,ls,be,yt),W(e,{K:vt,Vt:{x:st.w,y:st.h},Rt:{x:ot.w,y:ot.h},rn:ht,Lt:Do(St,ot)}),{en:wt,nn:it,sn:rt,cn:It||rt,vn:Lt}}},bi=t=>{const[e,n,s]=gi(t),i={ln:{t:0,r:0,b:0,l:0},dn:!1,rt:{[an]:0,[dn]:0,[ln]:0,[nn]:0,[on]:0,[rn]:0,[cn]:0},Vt:{x:0,y:0},Rt:{x:0,y:0},K:{x:Ht,y:Ht},rn:{x:!1,y:!1},Lt:Tn()},{vt:o,gt:r,nt:l,Ot:a}=e,{R:c,k:d}=Lt(),h=!c&&(d.x||d.y),p=[yi(e),vi(e,i),wi(e,i)];return[n,t=>{const e={},n=h&&mt(r),s=n&&a();return K(p,(n=>{W(e,n(t,e)||{})})),Et(r,n),s&&s(),!l&&Et(o,0),e},i,e,s]},Si=(t,e,n,s,i)=>{let o=!1;const r=Vs(e,{}),[l,a,c,d,h]=bi(t),[p,u,m]=ui(d,c,r,(t=>{w({},t)})),[y,f,,g]=mi(t,e,m,c,d,i),v=t=>bt(t).some((e=>!!t[e])),w=(t,i)=>{if(n())return!1;const{pn:r,Dt:l,At:c,hn:d}=t,h=r||{},p=!!l||!o,y={It:Vs(e,h,p),pn:h,Dt:p};if(d)return f(y),!1;const g=i||u(W({},y,{At:c})),w=a(W({},y,{_n:m,Zt:g}));f(W({},y,{Zt:g,tn:w}));const b=v(g),x=v(w),E=b||x||!ms(h)||p;return o=!0,E&&s(t,{Zt:g,tn:w}),E};return[()=>{const{an:t,gt:e,Ot:n}=d,s=mt(t),i=[p(),l(),y()],o=n();return Et(e,s),o(),A(gt,i)},w,()=>({gn:m,bn:c}),{wn:d,yn:g},h]},kt=(t,e,n)=>{const{N:s}=Lt(),i=Le(t),o=i?t:t.target,r=zn(o);if(e&&!r){let r=!1;const l=[],a={},c=t=>{const e=mn(t),n=ie(ci);return n?n(e,!0):e},d=W({},s(),c(e)),[h,p,u]=rs(),[m,y,f]=rs(n),g=(t,e)=>{f(t,e),u(t,e)},[v,w,b,x,E]=Si(t,d,(()=>r),(({pn:t,Dt:e},{Zt:n,tn:s})=>{const{ft:i,Ct:o,xt:r,Ht:l,Et:a,dt:c}=n,{nn:d,sn:h,en:p,cn:u}=s;g("updated",[S,{updateHints:{sizeChanged:!!i,directionChanged:!!o,heightIntrinsicChanged:!!r,overflowEdgeChanged:!!d,overflowAmountChanged:!!h,overflowStyleChanged:!!p,scrollCoordinatesChanged:!!u,contentMutation:!!l,hostMutation:!!a,appear:!!c},changedOptions:t||{},force:!!e}])}),(t=>g("scroll",[S,t]))),L=t=>{ni(o),gt(l),r=!0,g("destroyed",[S,t]),p(),y()},S={options(t,e){if(t){const n=e?s():{},i=An(d,W(n,c(t)));ms(i)||(W(d,i),w({pn:i}))}return W({},d)},on:m,off:(t,e)=>{t&&e&&y(t,e)},state(){const{gn:t,bn:e}=b(),{ct:n}=t,{Vt:s,Rt:i,K:o,rn:l,ln:a,dn:c,Lt:d}=e;return W({},{overflowEdge:s,overflowAmount:i,overflowStyle:o,hasOverflow:l,scrollCoordinates:{start:d.D,end:d.M},padding:a,paddingAbsolute:c,directionRTL:n,destroyed:r})},elements(){const{vt:t,ht:e,ln:n,ot:s,bt:i,gt:o,Qt:r}=x.wn,{Xt:l,Gt:a}=x.yn,c=t=>{const{Pt:e,Ut:n,Tt:s}=t;return{scrollbar:s,track:n,handle:e}},d=t=>{const{Yt:e,Wt:n}=t,s=c(e[0]);return W({},s,{clone:()=>{const t=c(n());return w({hn:!0}),t}})};return W({},{target:t,host:e,padding:n||s,viewport:s,content:i||s,scrollOffsetElement:o,scrollEventElement:r,scrollbarHorizontal:d(l),scrollbarVertical:d(a)})},update:t=>w({Dt:t,At:!0}),destroy:A(L,!1),plugin:t=>a[bt(t)[0]]};return tt(l,[E]),si(o,S),Fn(Rn,kt,[S,h,a]),ei(x.wn.wt,!i&&t.cancel)?(L(!0),S):(tt(l,v()),g("initialized",[S]),S.update(),S)}return r};kt.plugin=t=>{const e=_t(t),n=e?t:[t],s=n.map((t=>Fn(t,kt)[0]));return ii(n),e?s:s[0]},kt.valid=t=>{const e=t&&t.elements,n=wt(e)&&e();return _e(n)&&!!zn(n.target)},kt.env=()=>{const{T:t,k:e,R:n,V:s,B:i,F:o,U:r,P:l,N:a,q:c}=Lt();return W({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,scrollTimeline:s,staticDefaultInitialization:i,staticDefaultOptions:o,getDefaultInitialization:r,setDefaultInitialization:l,getDefaultOptions:a,setDefaultOptions:c})},kt.nonce=Jo;const Vn=!!document.getElementById("banner-wrapper");function Cs(t,e){document.addEventListener("click",(n=>{let s=document.getElementById(t),i=n.target;if(i instanceof Node){for(let t of e){let e=document.getElementById(t);if(e==i||e?.contains(i))return}s.classList.add("float-panel-closed")}}))}function xi(){const t=Qn();to(t)}function Ei(){eo(so())}function Zn(){const t=document.querySelector("body");t&&(kt({target:t,cancel:{nativeScrollbarsOverlaid:!0}},{scrollbars:{theme:"scrollbar-base scrollbar-auto py-1",autoHide:"move",autoHideDelay:500,autoHideSuspend:!1}}),document.querySelectorAll("pre").forEach((t=>{kt(t,{scrollbars:{theme:"scrollbar-base scrollbar-dark px-2",autoHide:"leave",autoHideDelay:500,autoHideSuspend:!1}})})))}function Ci(){const t=document.getElementById("banner");t?t.classList.remove("opacity-0","scale-105"):console.error("Failed to find the banner element")}function Wn(){xi(),Ei(),Zn(),Ci()}Cs("display-setting",["display-setting","display-settings-switch"]),Cs("nav-menu-panel",["nav-menu-panel","nav-menu-switch"]),Cs("search-panel",["search-panel","search-bar","search-switch"]),Wn(),document.addEventListener("astro:after-swap",Wn);const Ys=()=>{window.swup.hooks.on("link:click",(()=>{if(document.documentElement.style.setProperty("--content-delay","0ms"),!Vn)return;let t=.3*window.innerHeight-72-16,e=document.getElementById("navbar-wrapper");!e||!document.body.classList.contains("lg:is-home")||(document.body.scrollTop>=t||document.documentElement.scrollTop>=t)&&e.classList.add("navbar-hidden")})),window.swup.hooks.on("content:replace",Zn),window.swup.hooks.on("visit:start",(t=>{const e=document.querySelector("body");no(t.to.url,oo("/"))?e.classList.add("lg:is-home"):e.classList.remove("lg:is-home");const n=document.getElementById("page-height-extend");n&&n.classList.remove("hidden")})),window.swup.hooks.on("page:view",(()=>{const t=document.getElementById("page-height-extend");t&&t.classList.remove("hidden")})),window.swup.hooks.on("visit:end",(t=>{const e=document.getElementById("page-height-extend");e&&e.classList.add("hidden")}))};window?.swup?.hooks?Ys():document.addEventListener("swup:enable",Ys);let We=document.getElementById("back-to-top-btn"),Ue=document.getElementById("navbar-wrapper");function _i(){if(We&&(document.body.scrollTop>600||document.documentElement.scrollTop>600?We.classList.remove("hide"):We.classList.add("hide")),Vn&&Ue){let t=.3*window.innerHeight-72-16;document.body.classList.contains("lg:is-home")&&window.innerWidth>=1024&&(t=.6*window.innerHeight-72-16),document.body.scrollTop>=t||document.documentElement.scrollTop>=t?Ue.classList.add("navbar-hidden"):Ue.classList.remove("navbar-hidden")}}function Li(){"dark"===localStorage.theme?(document.documentElement.classList.remove("dark"),localStorage.theme="light"):(document.documentElement.classList.add("dark"),localStorage.theme="dark")}function Un(){let t=document.getElementById("scheme-switch");t&&t.addEventListener("click",(function(){Li()}));let e=document.getElementById("display-settings-switch");e&&e.addEventListener("click",(function(){let t=document.getElementById("display-setting");t&&t.classList.toggle("float-panel-closed")}));let n=document.getElementById("nav-menu-switch");n&&n.addEventListener("click",(function(){let t=document.getElementById("nav-menu-panel");t&&t.classList.toggle("float-panel-closed")}))}window.onscroll=_i,Un(),document.addEventListener("astro:after-swap",(()=>{Un()}),{once:!1});class Oi extends HTMLElement{constructor(){if(super(),"true"!==this.dataset.isCollapsed)return;const t=this.dataset.id,e=this.querySelector(".expand-btn"),n=this.querySelector(`#${t}`);e.addEventListener("click",(()=>{n.classList.remove("collapsed"),e.classList.add("hidden")}))}}customElements.define("widget-layout",Oi); \ No newline at end of file diff --git a/about/index.html b/about/index.html index 8b512d3..bea7f68 100644 --- a/about/index.html +++ b/about/index.html @@ -1 +1 @@ -关于 - 平淡生活
\ No newline at end of file +关于 - 平淡生活
\ No newline at end of file diff --git a/archive/category/uncategorized/index.html b/archive/category/uncategorized/index.html index 1dac17f..23ad049 100644 --- a/archive/category/uncategorized/index.html +++ b/archive/category/uncategorized/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/category/\345\210\206\344\272\253/index.html" "b/archive/category/\345\210\206\344\272\253/index.html" index a72b953..c1a2009 100644 --- "a/archive/category/\345\210\206\344\272\253/index.html" +++ "b/archive/category/\345\210\206\344\272\253/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/category/\345\215\232\345\256\242/index.html" "b/archive/category/\345\215\232\345\256\242/index.html" index cf9135d..cc484bd 100644 --- "a/archive/category/\345\215\232\345\256\242/index.html" +++ "b/archive/category/\345\215\232\345\256\242/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/category/\346\216\250\350\215\220/index.html" "b/archive/category/\346\216\250\350\215\220/index.html" index ef6a407..970cb70 100644 --- "a/archive/category/\346\216\250\350\215\220/index.html" +++ "b/archive/category/\346\216\250\350\215\220/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/category/\351\232\217\347\254\224/index.html" "b/archive/category/\351\232\217\347\254\224/index.html" index 97dc159..3ccb127 100644 --- "a/archive/category/\351\232\217\347\254\224/index.html" +++ "b/archive/category/\351\232\217\347\254\224/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/category/\351\273\230\350\256\244/index.html" "b/archive/category/\351\273\230\350\256\244/index.html" index 8eecad0..da0bf6e 100644 --- "a/archive/category/\351\273\230\350\256\244/index.html" +++ "b/archive/category/\351\273\230\350\256\244/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/index.html b/archive/index.html index 7c9bcb0..f424d18 100644 --- a/archive/index.html +++ b/archive/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Alist/index.html b/archive/tag/Alist/index.html index ca9fed5..c9107c4 100644 --- a/archive/tag/Alist/index.html +++ b/archive/tag/Alist/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Artalk/index.html b/archive/tag/Artalk/index.html index bb88df5..6aa468d 100644 --- a/archive/tag/Artalk/index.html +++ b/archive/tag/Artalk/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Astro/index.html b/archive/tag/Astro/index.html index 9ba29ca..5181315 100644 --- a/archive/tag/Astro/index.html +++ b/archive/tag/Astro/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/CommentsByQQ/index.html b/archive/tag/CommentsByQQ/index.html index 93eea95..c4eb040 100644 --- a/archive/tag/CommentsByQQ/index.html +++ b/archive/tag/CommentsByQQ/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Docker/index.html b/archive/tag/Docker/index.html index 62eefbf..750e3a8 100644 --- a/archive/tag/Docker/index.html +++ b/archive/tag/Docker/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Github/index.html b/archive/tag/Github/index.html index a143efe..0665f73 100644 --- a/archive/tag/Github/index.html +++ b/archive/tag/Github/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Gotosocial/index.html b/archive/tag/Gotosocial/index.html index a27960f..8621721 100644 --- a/archive/tag/Gotosocial/index.html +++ b/archive/tag/Gotosocial/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Hexo/index.html b/archive/tag/Hexo/index.html index 7772526..faffdc2 100644 --- a/archive/tag/Hexo/index.html +++ b/archive/tag/Hexo/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Linux/index.html b/archive/tag/Linux/index.html index 2b38930..6d6f5f0 100644 --- a/archive/tag/Linux/index.html +++ b/archive/tag/Linux/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Mariadb/index.html b/archive/tag/Mariadb/index.html index cf3fd76..eb659e0 100644 --- a/archive/tag/Mariadb/index.html +++ b/archive/tag/Mariadb/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Memos/index.html b/archive/tag/Memos/index.html index 267bd4f..595cbef 100644 --- a/archive/tag/Memos/index.html +++ b/archive/tag/Memos/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Pleroma/index.html b/archive/tag/Pleroma/index.html index 6f869a3..c53d073 100644 --- a/archive/tag/Pleroma/index.html +++ b/archive/tag/Pleroma/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" "b/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" index e7f59a2..0828ea2 100644 --- "a/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" +++ "b/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/SForum/index.html b/archive/tag/SForum/index.html index fe94da4..ca93af7 100644 --- a/archive/tag/SForum/index.html +++ b/archive/tag/SForum/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/Twikoo/index.html b/archive/tag/Twikoo/index.html index a1c036c..87ea834 100644 --- a/archive/tag/Twikoo/index.html +++ b/archive/tag/Twikoo/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/V2RAY/index.html b/archive/tag/V2RAY/index.html index 61df4db..684db0c 100644 --- a/archive/tag/V2RAY/index.html +++ b/archive/tag/V2RAY/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/VPS/index.html b/archive/tag/VPS/index.html index 241600d..5f78697 100644 --- a/archive/tag/VPS/index.html +++ b/archive/tag/VPS/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/amd/index.html b/archive/tag/amd/index.html index c30627f..4fa5791 100644 --- a/archive/tag/amd/index.html +++ b/archive/tag/amd/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/artalk/index.html b/archive/tag/artalk/index.html index acb740c..319b9cc 100644 --- a/archive/tag/artalk/index.html +++ b/archive/tag/artalk/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/centos/index.html b/archive/tag/centos/index.html index bfaa9ef..76adfed 100644 --- a/archive/tag/centos/index.html +++ b/archive/tag/centos/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/chajian/index.html b/archive/tag/chajian/index.html index 7f16a1c..03d9769 100644 --- a/archive/tag/chajian/index.html +++ b/archive/tag/chajian/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/chatgpt/index.html b/archive/tag/chatgpt/index.html index a1209c8..563b7f1 100644 --- a/archive/tag/chatgpt/index.html +++ b/archive/tag/chatgpt/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/cloud torrent/index.html b/archive/tag/cloud torrent/index.html index 946dbfd..33cbcc2 100644 --- a/archive/tag/cloud torrent/index.html +++ b/archive/tag/cloud torrent/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/clover/index.html b/archive/tag/clover/index.html index 574723c..4785e56 100644 --- a/archive/tag/clover/index.html +++ b/archive/tag/clover/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/edid/index.html b/archive/tag/edid/index.html index 427fc2d..2bb4462 100644 --- a/archive/tag/edid/index.html +++ b/archive/tag/edid/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/fly.io/index.html b/archive/tag/fly.io/index.html index 3388fa3..30acd3d 100644 --- a/archive/tag/fly.io/index.html +++ b/archive/tag/fly.io/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/fuwari/index.html b/archive/tag/fuwari/index.html index 46ec581..bfe7293 100644 --- a/archive/tag/fuwari/index.html +++ b/archive/tag/fuwari/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/hackintool/index.html b/archive/tag/hackintool/index.html index e26d10e..d8c2fd9 100644 --- a/archive/tag/hackintool/index.html +++ b/archive/tag/hackintool/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/hexo/index.html b/archive/tag/hexo/index.html index 34ebcef..32bb9dd 100644 --- a/archive/tag/hexo/index.html +++ b/archive/tag/hexo/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/lede/index.html b/archive/tag/lede/index.html index e56ecfa..22c7124 100644 --- a/archive/tag/lede/index.html +++ b/archive/tag/lede/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/linux/index.html b/archive/tag/linux/index.html index 1031581..5270909 100644 --- a/archive/tag/linux/index.html +++ b/archive/tag/linux/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/macos/index.html b/archive/tag/macos/index.html index 9f8d397..6873f84 100644 --- a/archive/tag/macos/index.html +++ b/archive/tag/macos/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/mastodon/index.html b/archive/tag/mastodon/index.html index 1c84746..f1d2419 100644 --- a/archive/tag/mastodon/index.html +++ b/archive/tag/mastodon/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/memos/index.html b/archive/tag/memos/index.html index 45655ed..8afcee0 100644 --- a/archive/tag/memos/index.html +++ b/archive/tag/memos/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/office/index.html b/archive/tag/office/index.html index a24a4ff..dd958d7 100644 --- a/archive/tag/office/index.html +++ b/archive/tag/office/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/opencore/index.html b/archive/tag/opencore/index.html index cc3e053..12c28ac 100644 --- a/archive/tag/opencore/index.html +++ b/archive/tag/opencore/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/openwrt/index.html b/archive/tag/openwrt/index.html index 6f75a6a..b137c94 100644 --- a/archive/tag/openwrt/index.html +++ b/archive/tag/openwrt/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/samsung/index.html b/archive/tag/samsung/index.html index 5a93ed0..c298769 100644 --- a/archive/tag/samsung/index.html +++ b/archive/tag/samsung/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/torrent/index.html b/archive/tag/torrent/index.html index 1d0fadd..46bbbc4 100644 --- a/archive/tag/torrent/index.html +++ b/archive/tag/torrent/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/typecho/index.html b/archive/tag/typecho/index.html index add80e0..a9f6bc9 100644 --- a/archive/tag/typecho/index.html +++ b/archive/tag/typecho/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/webhook/index.html b/archive/tag/webhook/index.html index 72ad245..3b56a61 100644 --- a/archive/tag/webhook/index.html +++ b/archive/tag/webhook/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/archive/tag/windows/index.html b/archive/tag/windows/index.html index 69fc721..9e5eb63 100644 --- a/archive/tag/windows/index.html +++ b/archive/tag/windows/index.html @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\344\270\213\350\275\275/index.html" "b/archive/tag/\344\270\213\350\275\275/index.html" index 12f1526..a01e6b9 100644 --- "a/archive/tag/\344\270\213\350\275\275/index.html" +++ "b/archive/tag/\344\270\213\350\275\275/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\344\270\273\346\216\247/index.html" "b/archive/tag/\344\270\273\346\216\247/index.html" index 4751477..0b4f40a 100644 --- "a/archive/tag/\344\270\273\346\216\247/index.html" +++ "b/archive/tag/\344\270\273\346\216\247/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\205\215\351\251\261/index.html" "b/archive/tag/\345\205\215\351\251\261/index.html" index 08d6f7d..ce8e88b 100644 --- "a/archive/tag/\345\205\215\351\251\261/index.html" +++ "b/archive/tag/\345\205\215\351\251\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\215\232\345\256\242/index.html" "b/archive/tag/\345\215\232\345\256\242/index.html" index 4379779..0b82e42 100644 --- "a/archive/tag/\345\215\232\345\256\242/index.html" +++ "b/archive/tag/\345\215\232\345\256\242/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\216\202\345\225\206/index.html" "b/archive/tag/\345\216\202\345\225\206/index.html" index 66c38e6..46d0ea1 100644 --- "a/archive/tag/\345\216\202\345\225\206/index.html" +++ "b/archive/tag/\345\216\202\345\225\206/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\221\275\344\273\244/index.html" "b/archive/tag/\345\221\275\344\273\244/index.html" index c653535..30a6a60 100644 --- "a/archive/tag/\345\221\275\344\273\244/index.html" +++ "b/archive/tag/\345\221\275\344\273\244/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\233\272\346\200\201/index.html" "b/archive/tag/\345\233\272\346\200\201/index.html" index 82ae27a..1222bbf 100644 --- "a/archive/tag/\345\233\272\346\200\201/index.html" +++ "b/archive/tag/\345\233\272\346\200\201/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\255\227\344\275\223/index.html" "b/archive/tag/\345\255\227\344\275\223/index.html" index 7dd3138..f563595 100644 --- "a/archive/tag/\345\255\227\344\275\223/index.html" +++ "b/archive/tag/\345\255\227\344\275\223/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\345\274\200\345\215\241/index.html" "b/archive/tag/\345\274\200\345\215\241/index.html" index c309d2b..ffbf922 100644 --- "a/archive/tag/\345\274\200\345\215\241/index.html" +++ "b/archive/tag/\345\274\200\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\346\225\231\347\250\213/index.html" "b/archive/tag/\346\225\231\347\250\213/index.html" index af1cb25..24b577c 100644 --- "a/archive/tag/\346\225\231\347\250\213/index.html" +++ "b/archive/tag/\346\225\231\347\250\213/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\346\230\276\345\215\241/index.html" "b/archive/tag/\346\230\276\345\215\241/index.html" index 6d28b1b..f443aac 100644 --- "a/archive/tag/\346\230\276\345\215\241/index.html" +++ "b/archive/tag/\346\230\276\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\346\242\257\345\255\220/index.html" "b/archive/tag/\346\242\257\345\255\220/index.html" index f5316b3..01e2747 100644 --- "a/archive/tag/\346\242\257\345\255\220/index.html" +++ "b/archive/tag/\346\242\257\345\255\220/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\346\263\250\345\206\214/index.html" "b/archive/tag/\346\263\250\345\206\214/index.html" index 217e7cb..485a29c 100644 --- "a/archive/tag/\346\263\250\345\206\214/index.html" +++ "b/archive/tag/\346\263\250\345\206\214/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\224\237\346\264\273/index.html" "b/archive/tag/\347\224\237\346\264\273/index.html" index 4af9df6..5acfd52 100644 --- "a/archive/tag/\347\224\237\346\264\273/index.html" +++ "b/archive/tag/\347\224\237\346\264\273/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\241\254\347\233\230/index.html" "b/archive/tag/\347\241\254\347\233\230/index.html" index 302b3fb..281245a 100644 --- "a/archive/tag/\347\241\254\347\233\230/index.html" +++ "b/archive/tag/\347\241\254\347\233\230/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" "b/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" index 8e02c66..538d74b 100644 --- "a/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" +++ "b/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\243\201\345\212\233/index.html" "b/archive/tag/\347\243\201\345\212\233/index.html" index f84c65e..d2167d9 100644 --- "a/archive/tag/\347\243\201\345\212\233/index.html" +++ "b/archive/tag/\347\243\201\345\212\233/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" "b/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" index 52bd07f..5854d74 100644 --- "a/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" +++ "b/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" "b/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" index 570a733..f6eeb63 100644 --- "a/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" +++ "b/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" "b/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" index c9dea9b..39e22eb 100644 --- "a/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" +++ "b/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" "b/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" index b3b87a1..887bb1f 100644 --- "a/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" +++ "b/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\247\202\345\275\261/index.html" "b/archive/tag/\350\247\202\345\275\261/index.html" index 74649b5..045c47f 100644 --- "a/archive/tag/\350\247\202\345\275\261/index.html" +++ "b/archive/tag/\350\247\202\345\275\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\257\204\350\256\272/index.html" "b/archive/tag/\350\257\204\350\256\272/index.html" index ed5d8fd..b3d155e 100644 --- "a/archive/tag/\350\257\204\350\256\272/index.html" +++ "b/archive/tag/\350\257\204\350\256\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\261\206\347\223\243/index.html" "b/archive/tag/\350\261\206\347\223\243/index.html" index c31166a..4123fa7 100644 --- "a/archive/tag/\350\261\206\347\223\243/index.html" +++ "b/archive/tag/\350\261\206\347\223\243/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" "b/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" index 5bae321..c6c0e86 100644 --- "a/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" +++ "b/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\351\203\250\347\275\262/index.html" "b/archive/tag/\351\203\250\347\275\262/index.html" index 1996a6d..a9be1e8 100644 --- "a/archive/tag/\351\203\250\347\275\262/index.html" +++ "b/archive/tag/\351\203\250\347\275\262/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\351\230\277\351\207\214/index.html" "b/archive/tag/\351\230\277\351\207\214/index.html" index d84331e..0c237b3 100644 --- "a/archive/tag/\351\230\277\351\207\214/index.html" +++ "b/archive/tag/\351\230\277\351\207\214/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" "b/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" index b3d731b..174386b 100644 --- "a/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" +++ "b/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" "b/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" index 75fde22..4f02461 100644 --- "a/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" +++ "b/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git "a/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" "b/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" index e4e2aa3..aeb284d 100644 --- "a/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" +++ "b/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" @@ -1 +1 @@ -归档 - 平淡生活
\ No newline at end of file +归档 - 平淡生活
\ No newline at end of file diff --git a/index.html b/index.html index 8eafd55..eb17449 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
从Hexo到Astro
本文简单讲述了如何从从Hexo到Astro的过程,并使用脚本转换Front-matter
413 字
|
2 分钟
LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
这篇文章介绍了如何通过SSH登录到软路由,并指导用户安装一个名为koolss的科学上网插件。具体步骤包括下载插件文件,其链接为[https://blog-1312096806.cos.ap-guangzhou.myqcloud.com/halo/koolss_2.2.2.tar.gz]。
30 字
|
1 分钟
给Memos添加Artalk评论
2024-10-10
这篇文章介绍了如何为Memos v0.16.1版本添加Twikoo评论功能,并提供了自定义脚本和样式的更新说明。文章中包括了具体的代码替换步骤,如将’.resource-wrapper’替换为’.gap-2’或’.memo-wrapper’,以及如何隐藏评论数的操作指南。此外,还提到了适用于Memos 0.15.1版本以下的更新提醒。
230 字
|
1 分钟
给Memos添加Twikoo评论
2024-10-10
这篇文章介绍了如何更新和自定义脚本以适应不同版本的memos应用。文章提到了2023年10月23日对脚本的更新,使其适用于memos v0.16.1版本,以及之前的几次更新。此外,文章还提到了由于官方已经添加了评论图标,因此不再需要通过CSS添加图标。最后,文章指出了在memos升级到0.15.1版本后,某些自定义脚本无法使用的情况。
577 字
|
3 分钟
Artalk评论使用QQ机器人通知
这篇文章介绍了如何使用QQ机器人接收Artalk的评论通知。文章首先确保Artalk和QQ机器人都已部署完成,然后通过配置QQ机器人的HTTP服务和中间服务MESSAGE-PUSHER来实现消息推送。接着,文章详细说明了如何在MESSAGE-PUSHER中配置通道和接口,并将生成的Webhook地址填入Artalk的Webhook设置中,从而实现Artalk评论时QQ机器人的通知功能。
417 字
|
2 分钟
使用Docker快速部署一个memos的QQ机器人
这篇文章介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。文章详细描述了准备工作,包括安装Docker、获取QQ账号和Memos账号。接着,文章提供了具体的部署步骤,包括创建docker-compose.yml文件并运行相关命令来启动QQ机器人。最后,文章还简要说明了如何使用这个机器人,包括绑定账号和发送消息到Memos的功能。
500 字
|
3 分钟
给博客增加一个观影页面
这篇文章介绍了作者如何通过自定义代码构建一个观影页面,而不是使用插件。文章详细描述了项目的GitHub地址,并提供了具体的步骤:首先根据提供的GitHub链接创建接口,然后在博客根目录下新建movies文件夹和index.md文件,接着创建movies.js文件和movies.css文件,最后完成页面的构建。
471 字
|
2 分钟
通过取子集的方式压缩霞鹜文楷字体
这篇文章介绍了如何使用Python的fonttools库对字体文件进行子集化和压缩。首先,通过pip安装fonttools库,然后使用该库对指定的字体文件进行子集化处理,保留特定的字符集,从而将字体文件从11M压缩到1.7M左右。接着,文章还提到了如何安装并使用brotli模块进一步压缩字体文件,并将最终结果转换为woff2格式,大小约为840kb。整个过程涉及输入和输出文件路径的定义,以及具体的命令操作。
199 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
从Hexo到Astro
本文简单讲述了如何从从Hexo到Astro的过程,并使用脚本转换Front-matter
413 字
|
2 分钟
LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
这篇文章介绍了如何通过SSH登录到软路由,并指导用户安装一个名为koolss的科学上网插件。具体步骤包括下载插件文件,其链接为[https://blog-1312096806.cos.ap-guangzhou.myqcloud.com/halo/koolss_2.2.2.tar.gz]。
30 字
|
1 分钟
给Memos添加Artalk评论
2024-10-10
这篇文章介绍了如何为Memos v0.16.1版本添加Twikoo评论功能,并提供了自定义脚本和样式的更新说明。文章中包括了具体的代码替换步骤,如将’.resource-wrapper’替换为’.gap-2’或’.memo-wrapper’,以及如何隐藏评论数的操作指南。此外,还提到了适用于Memos 0.15.1版本以下的更新提醒。
230 字
|
1 分钟
给Memos添加Twikoo评论
2024-10-10
这篇文章介绍了如何更新和自定义脚本以适应不同版本的memos应用。文章提到了2023年10月23日对脚本的更新,使其适用于memos v0.16.1版本,以及之前的几次更新。此外,文章还提到了由于官方已经添加了评论图标,因此不再需要通过CSS添加图标。最后,文章指出了在memos升级到0.15.1版本后,某些自定义脚本无法使用的情况。
577 字
|
3 分钟
Artalk评论使用QQ机器人通知
这篇文章介绍了如何使用QQ机器人接收Artalk的评论通知。文章首先确保Artalk和QQ机器人都已部署完成,然后通过配置QQ机器人的HTTP服务和中间服务MESSAGE-PUSHER来实现消息推送。接着,文章详细说明了如何在MESSAGE-PUSHER中配置通道和接口,并将生成的Webhook地址填入Artalk的Webhook设置中,从而实现Artalk评论时QQ机器人的通知功能。
417 字
|
2 分钟
使用Docker快速部署一个memos的QQ机器人
这篇文章介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。文章详细描述了准备工作,包括安装Docker、获取QQ账号和Memos账号。接着,文章提供了具体的部署步骤,包括创建docker-compose.yml文件并运行相关命令来启动QQ机器人。最后,文章还简要说明了如何使用这个机器人,包括绑定账号和发送消息到Memos的功能。
500 字
|
3 分钟
给博客增加一个观影页面
这篇文章介绍了作者如何通过自定义代码构建一个观影页面,而不是使用插件。文章详细描述了项目的GitHub地址,并提供了具体的步骤:首先根据提供的GitHub链接创建接口,然后在博客根目录下新建movies文件夹和index.md文件,接着创建movies.js文件和movies.css文件,最后完成页面的构建。
471 字
|
2 分钟
通过取子集的方式压缩霞鹜文楷字体
这篇文章介绍了如何使用Python的fonttools库对字体文件进行子集化和压缩。首先,通过pip安装fonttools库,然后使用该库对指定的字体文件进行子集化处理,保留特定的字符集,从而将字体文件从11M压缩到1.7M左右。接着,文章还提到了如何安装并使用brotli模块进一步压缩字体文件,并将最终结果转换为woff2格式,大小约为840kb。整个过程涉及输入和输出文件路径的定义,以及具体的命令操作。
199 字
|
1 分钟
\ No newline at end of file diff --git a/memos/index.html b/memos/index.html index 8b2c9d3..80d71fc 100644 --- a/memos/index.html +++ b/memos/index.html @@ -1 +1 @@ -关于 - 平淡生活
\ No newline at end of file +关于 - 平淡生活
\ No newline at end of file diff --git a/pagefind/fragment/zh-cn_56a862e.pf_fragment b/pagefind/fragment/zh-cn_56a862e.pf_fragment new file mode 100644 index 0000000..23040a2 Binary files /dev/null and b/pagefind/fragment/zh-cn_56a862e.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_8c4c887.pf_fragment b/pagefind/fragment/zh-cn_8c4c887.pf_fragment deleted file mode 100644 index f16847d..0000000 Binary files a/pagefind/fragment/zh-cn_8c4c887.pf_fragment and /dev/null differ diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 67537dd..0eafaef 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"1.1.0","languages":{"zh-cn":{"hash":"zh-cn_6d4975d6ba4b8","wasm":null,"page_count":44}}} \ No newline at end of file +{"version":"1.1.0","languages":{"zh-cn":{"hash":"zh-cn_f35a6b1ec771e","wasm":null,"page_count":44}}} \ No newline at end of file diff --git a/pagefind/pagefind.zh-cn_6d4975d6ba4b8.pf_meta b/pagefind/pagefind.zh-cn_6d4975d6ba4b8.pf_meta deleted file mode 100644 index dd9af05..0000000 Binary files a/pagefind/pagefind.zh-cn_6d4975d6ba4b8.pf_meta and /dev/null differ diff --git a/pagefind/pagefind.zh-cn_f35a6b1ec771e.pf_meta b/pagefind/pagefind.zh-cn_f35a6b1ec771e.pf_meta new file mode 100644 index 0000000..51b37f9 Binary files /dev/null and b/pagefind/pagefind.zh-cn_f35a6b1ec771e.pf_meta differ diff --git a/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html b/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html index f79baef..6fc63de 100644 --- a/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html +++ b/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html @@ -1 +1 @@ -2023年黑苹果amd免驱显卡购买推荐 - 平淡生活
332 字
2 分钟
2023年黑苹果amd免驱显卡购买推荐

RX 6600 RX 6600 XT RX 6800 RX 6800 XT RX 6900 XT

RX 5500 RX 5500 XT RX 5600 RX 5600 XT RX 5700 RX 5700 XT RX 5700 XT 50周年纪念版 如遇到黑屏,需要boot参数agdpmod=pikera才能正确显示

Vega 20系列 从Mojave开始支持#

Radeon VII

Vega 10系列 从High Sierra开始支持#

Vega 64 Liquid Vega 64 Vega 56 Vega Frontier Edition Radeon Pro WX 9100 Radeon Pro WX 7100 ## Polaris架构10和20系列 从Sierra开始支持 400系列:

RX 480 RX 470D RX 470 RX 460 RX 590 RX 580X RX 580 RX 570X RX 570 RX 560X RX 560 WX 5100 WX 4100 E9550

还有些同Polaris核心的 rx550

R7 / R9系列 从Yosemite开始支持#

R9 Fury X R9 Fury R9 Nano R9 390(需要FakeID) R9 290X / 390X R9 290/390(需提供FakeID) R9 280x / 380x(不一定成功) R9 280/380(需要FakeID) R9 270X / 370X R7 270/370(需提供FakeID) R7 265 R7 260x / 360x R9 260/360(根据型号可能需要FakeID) R9 255 R7 250X R7 250(需提供FakeID) R7 240(需要FakeID)

HD 8000系列 从Mountain Lion开始支持#

HD 8740 HD 8760 HD 8770 HD 8850 HD 8870 HD 8890 HD 8950 HD 8970

HD 7000系列 从Mountain Lion开始支持#

Dual AMD FirePro D300 Dual AMD FirePro D500 Dual AMD FirePro D700 FirePro W5100(FakeID needed) FirePro W7000 FirePro W9000 HD 7700 HD 7730 HD 7750 HD 7770 HD 7790 HD 7850 HD 7870 HD 7870 XT HD 7950 HD 7970 HD 7990

2023年黑苹果amd免驱显卡购买推荐
https://blog.ittst.com/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/
作者
浪子
发布于
2022-01-21
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +2023年黑苹果amd免驱显卡购买推荐 - 平淡生活
332 字
2 分钟
2023年黑苹果amd免驱显卡购买推荐

RX 6600 RX 6600 XT RX 6800 RX 6800 XT RX 6900 XT

RX 5500 RX 5500 XT RX 5600 RX 5600 XT RX 5700 RX 5700 XT RX 5700 XT 50周年纪念版 如遇到黑屏,需要boot参数agdpmod=pikera才能正确显示

Vega 20系列 从Mojave开始支持#

Radeon VII

Vega 10系列 从High Sierra开始支持#

Vega 64 Liquid Vega 64 Vega 56 Vega Frontier Edition Radeon Pro WX 9100 Radeon Pro WX 7100 ## Polaris架构10和20系列 从Sierra开始支持 400系列:

RX 480 RX 470D RX 470 RX 460 RX 590 RX 580X RX 580 RX 570X RX 570 RX 560X RX 560 WX 5100 WX 4100 E9550

还有些同Polaris核心的 rx550

R7 / R9系列 从Yosemite开始支持#

R9 Fury X R9 Fury R9 Nano R9 390(需要FakeID) R9 290X / 390X R9 290/390(需提供FakeID) R9 280x / 380x(不一定成功) R9 280/380(需要FakeID) R9 270X / 370X R7 270/370(需提供FakeID) R7 265 R7 260x / 360x R9 260/360(根据型号可能需要FakeID) R9 255 R7 250X R7 250(需提供FakeID) R7 240(需要FakeID)

HD 8000系列 从Mountain Lion开始支持#

HD 8740 HD 8760 HD 8770 HD 8850 HD 8870 HD 8890 HD 8950 HD 8970

HD 7000系列 从Mountain Lion开始支持#

Dual AMD FirePro D300 Dual AMD FirePro D500 Dual AMD FirePro D700 FirePro W5100(FakeID needed) FirePro W7000 FirePro W9000 HD 7700 HD 7730 HD 7750 HD 7770 HD 7790 HD 7850 HD 7870 HD 7870 XT HD 7950 HD 7970 HD 7990

2023年黑苹果amd免驱显卡购买推荐
https://blog.ittst.com/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/
作者
浪子
发布于
2022-01-21
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/2023-methods-to-register-chatgpt-in-china/index.html b/posts/2023-methods-to-register-chatgpt-in-china/index.html index 5aa64ad..108e9c7 100644 --- a/posts/2023-methods-to-register-chatgpt-in-china/index.html +++ b/posts/2023-methods-to-register-chatgpt-in-china/index.html @@ -1 +1 @@ -2023国内注册ChatGPT的方法 - 平淡生活
1192 字
6 分钟
2023国内注册ChatGPT的方法

国内注册ChatGPT的方法#

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出,基于 GPT-3.5 架构的大型语言模型并通过强化学习进行训练,在这款软件中用户们可以与 AI 人工智能进行多种的对话工作,目前,有部分地区(例如中国大陆香港)无法使用此项服务

ChatGPT技术开发商OpenAI斥巨资买下AI.com域名,现在访问AI.com直接跳转到ChatGPT官网。 2024年AI.com已经跳转到google Gemini的官网了

ChatGPT功能#

  • ChatGPT 在搜索和写作上非常强大。
  • ChatGPT 可以根据用户提供的信息,给出合理而有效的搜索结果,
  • ChatGPT 写的短篇小说,
  • ChatGPT 写的信件,内容通畅,用词准确。
  • ChatGPT 撰写专业的电子邮件回复
  • ChatGPT 为营销活动产生新的内容创意
  • ChatGPT 解决任何编码问题或为获取代码

国内用户注册ChatGPT的方法#

国内用户想要注册 ChatGPT,首先需要有一个网络环境,例如美国;然后,需要一个可以接收短信验证码的手机号码,之后就可以打开 ChatGPT 的网站注册 ,邮件验证,电话号码验证等等。

如果出现如下的界面,则证明你的网络所在地区无法注册访问ChatGPT。

注意:如果无法搞定上述必要条件的话,可以尝试 搭建一个梯子 x-ui:支持多协议多用户的 xray 面板

注册 OpenAI 账号#

1、点击打开 https://chat.openai.com/auth/login 页面中的 Sign up进行相应的账号注册(注意网络环境不能是香港澳门等地区,不然会提示不能在当前国家服务)。

注册 2、在新的页面可选择注册 ChatGPT 账号的方式,可以使用邮箱(国内邮箱也可以,建议使用国外邮箱),,或者有谷歌账号的邮箱,或者用 Microsoft Account 注册也可以。

选择创建ChatGPT账号的方式 使用邮箱注册ChatGPT时,输入邮箱地址,点击Continue,之后输入密码,进入下一步骤。

使用邮箱注册ChatGPT 使用 Microsoft Account 注册ChatGPT时,可以使用Microsoft账号登录,如果有Github账号的话,可点击登录选项,然后选择使用Github账号 注册。

使用Microsoft-Account注册ChatGPT 使用 Google 账号注册ChatGPT时,输入Google账号地址及密码,然后进入下一步骤。

使用Google账号注册ChatGPT 3、以使用邮箱注册ChatGPT为例,输入邮箱需要在邮箱收到的邮件内点击验证,

验证ChatGPT邮箱 4、然后继续在ChatGPT注册页面填入信息

在ChatGPT注册页面填入信息 5、填写ChatGPT手机短信验证码

填写ChatGPT手机短信验证码

接收手机短信验证码#

需要使用中国以外的手机号码进行验证,例如美国、印度等,可以在俄罗斯的接码平台sms-activate来完成,该网站支持中文/英文显示界面,支持支付宝,使用俄罗斯卢布计费。

1、现在就需要用到注册的第三方接码平台了,访问 https://sms-activate.org/

注册的第三方接码平台了

2、注册完成后需要充值(按照 1 美元兑换 73 卢布),点击右上角**“ 余额充值 ”,使用支付宝充值 1 美元即可(sms-activate.org平台规则发生变化,少于10美元充值,需最低充值2美元<2023.3.22>)**。

注册完成后需要充值 3、在平台左侧搜索 OpenAI ,然后在国家那里找到Indonesia(印度尼西亚),点击选择国家后面的加入购物车即可。

选择国家 4、然后等一会出现如下界面,这里的手机号拷贝出来,输入到上一步中注册OpenAI的界面上,然后点击 Send code按钮,在下图的界面中等待验证码短信发送

接收输入验证码 注意:有效期是20分钟,需要快速操作,若两三分钟没有收到短信验证码,可点击旁边的删除按钮,然后再次选择别的手机号码,未收到验证不扣费。

使用ChatGPT#

账号注册完成了,就可以尽情的使用ChatGPT来玩耍了,重新登录ChatGPT官网,然后访问Chat,这时你就可以开始尽情和机器人聊天了。

使用ChatGPT

使用ChatGPT示例,如何写一个吸引人的 标题

使用ChatGPT示例

总结#

以上是为你介绍的国内注册 ChatGPT 的方法,希望对你了解 ChatGPT 有所帮助,如有问题,欢迎联系我们。

2023国内注册ChatGPT的方法
https://blog.ittst.com/posts/2023-methods-to-register-chatgpt-in-china/
作者
浪子
发布于
2023-04-07
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +2023国内注册ChatGPT的方法 - 平淡生活
1192 字
6 分钟
2023国内注册ChatGPT的方法

国内注册ChatGPT的方法#

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出,基于 GPT-3.5 架构的大型语言模型并通过强化学习进行训练,在这款软件中用户们可以与 AI 人工智能进行多种的对话工作,目前,有部分地区(例如中国大陆香港)无法使用此项服务

ChatGPT技术开发商OpenAI斥巨资买下AI.com域名,现在访问AI.com直接跳转到ChatGPT官网。 2024年AI.com已经跳转到google Gemini的官网了

ChatGPT功能#

  • ChatGPT 在搜索和写作上非常强大。
  • ChatGPT 可以根据用户提供的信息,给出合理而有效的搜索结果,
  • ChatGPT 写的短篇小说,
  • ChatGPT 写的信件,内容通畅,用词准确。
  • ChatGPT 撰写专业的电子邮件回复
  • ChatGPT 为营销活动产生新的内容创意
  • ChatGPT 解决任何编码问题或为获取代码

国内用户注册ChatGPT的方法#

国内用户想要注册 ChatGPT,首先需要有一个网络环境,例如美国;然后,需要一个可以接收短信验证码的手机号码,之后就可以打开 ChatGPT 的网站注册 ,邮件验证,电话号码验证等等。

如果出现如下的界面,则证明你的网络所在地区无法注册访问ChatGPT。

注意:如果无法搞定上述必要条件的话,可以尝试 搭建一个梯子 x-ui:支持多协议多用户的 xray 面板

注册 OpenAI 账号#

1、点击打开 https://chat.openai.com/auth/login 页面中的 Sign up进行相应的账号注册(注意网络环境不能是香港澳门等地区,不然会提示不能在当前国家服务)。

注册 2、在新的页面可选择注册 ChatGPT 账号的方式,可以使用邮箱(国内邮箱也可以,建议使用国外邮箱),,或者有谷歌账号的邮箱,或者用 Microsoft Account 注册也可以。

选择创建ChatGPT账号的方式 使用邮箱注册ChatGPT时,输入邮箱地址,点击Continue,之后输入密码,进入下一步骤。

使用邮箱注册ChatGPT 使用 Microsoft Account 注册ChatGPT时,可以使用Microsoft账号登录,如果有Github账号的话,可点击登录选项,然后选择使用Github账号 注册。

使用Microsoft-Account注册ChatGPT 使用 Google 账号注册ChatGPT时,输入Google账号地址及密码,然后进入下一步骤。

使用Google账号注册ChatGPT 3、以使用邮箱注册ChatGPT为例,输入邮箱需要在邮箱收到的邮件内点击验证,

验证ChatGPT邮箱 4、然后继续在ChatGPT注册页面填入信息

在ChatGPT注册页面填入信息 5、填写ChatGPT手机短信验证码

填写ChatGPT手机短信验证码

接收手机短信验证码#

需要使用中国以外的手机号码进行验证,例如美国、印度等,可以在俄罗斯的接码平台sms-activate来完成,该网站支持中文/英文显示界面,支持支付宝,使用俄罗斯卢布计费。

1、现在就需要用到注册的第三方接码平台了,访问 https://sms-activate.org/

注册的第三方接码平台了

2、注册完成后需要充值(按照 1 美元兑换 73 卢布),点击右上角**“ 余额充值 ”,使用支付宝充值 1 美元即可(sms-activate.org平台规则发生变化,少于10美元充值,需最低充值2美元<2023.3.22>)**。

注册完成后需要充值 3、在平台左侧搜索 OpenAI ,然后在国家那里找到Indonesia(印度尼西亚),点击选择国家后面的加入购物车即可。

选择国家 4、然后等一会出现如下界面,这里的手机号拷贝出来,输入到上一步中注册OpenAI的界面上,然后点击 Send code按钮,在下图的界面中等待验证码短信发送

接收输入验证码 注意:有效期是20分钟,需要快速操作,若两三分钟没有收到短信验证码,可点击旁边的删除按钮,然后再次选择别的手机号码,未收到验证不扣费。

使用ChatGPT#

账号注册完成了,就可以尽情的使用ChatGPT来玩耍了,重新登录ChatGPT官网,然后访问Chat,这时你就可以开始尽情和机器人聊天了。

使用ChatGPT

使用ChatGPT示例,如何写一个吸引人的 标题

使用ChatGPT示例

总结#

以上是为你介绍的国内注册 ChatGPT 的方法,希望对你了解 ChatGPT 有所帮助,如有问题,欢迎联系我们。

2023国内注册ChatGPT的方法
https://blog.ittst.com/posts/2023-methods-to-register-chatgpt-in-china/
作者
浪子
发布于
2023-04-07
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/42-virtual-credit-card-opening-channels/index.html b/posts/42-virtual-credit-card-opening-channels/index.html index bdffbbe..fcd7ca6 100644 --- a/posts/42-virtual-credit-card-opening-channels/index.html +++ b/posts/42-virtual-credit-card-opening-channels/index.html @@ -1 +1 @@ -42个虚拟信用卡开卡渠道 - 平淡生活
1871 字
9 分钟
42个虚拟信用卡开卡渠道
  1. 全球付 http://www.globalcash.hk/ 在线申请,可充值,微信支付,开卡简单。

  2. 爱汇旅之卡 http://www.ihui.com/ 此卡是目前最方便容易获得,并大量获得的实体mastercard实体卡,可以直接联系客服大量拿卡,一次上百张甚至是数百张,该卡支持paypal、amazon、google等网站。

  3. Tap&go 拍住赏 http://tapngo.com.hk/ 可以支持微信,amazon、applepay 国际阿里云 GCE aws paypal等大部分网站,需要认证,买卡可以去香港总部或者某宝,最低100余额 充值可在香港便利店充值或者网上找人代充!

  4. 三三金融: https://cards.33finance.com 需要到香港公司进行开卡,也可以找某宝,开出来的卡适用于大部分网站,包括欧贝通/amazon/阿里云/paypal/等等等等,充值也需要到香港便利店或者是到公司充,也可以找人代充。

  5. Tierrapay www.tierrapay.com卡段4665 注册要用欧洲地址,比如英国,需要用pm或者是wmz充值,无需认证即可成功开卡。

  6. 通汇香港 https://www.transforex.hk/ 此卡要携带护照和身份证前往香港开通,该公司有礼品卡,固定金额每天限购买3张,经测试,此卡适用于paypal amazon ebay等平台

  7. Uphold www.uphold.com 需要护照和地址证明申请,支持银行 比特币进行充值

  8. Payeer http://www.zhesui.com/payeer/ 目前需要用欧洲国家的资料注册,

  9. Advcash 目前需要用欧洲国家的资料注册

  10. Moneypolo http://www.zhesui.com/moneypolo/需要完成实名认证,以及收费购买。

  11. Wirexapp http://www.zhesui.com/wirex-app-visa/ 4665卡段,目前需要用欧洲国家地址注册申请。没认证只能比特币充值。

  12. Payoneer派安盈 附带美国 日本 英国和欧洲银行账户 http://www.payoneer.com/

  13. okpay 需要用护照通过实名认证才能开卡。

  14. Qiwi https://qiwi.com/ 需要俄罗斯电话卡注册成功才能开卡 (俄罗斯卡可以去淘宝买一个)

  15. ecoPayz http://www.zhesui.com/ecopayz-card/ 目前需要认证,该卡支持大部分网站,可以无限移除替换卡片。

  16. 浦发E-GO卡(需要有浦发实体卡) http://www.zhesui.com/e-go/ 该卡可以开出银联 mastercard visa AME 四种卡片

  17. Yandexmoney money.yandex.ru 以上虚拟卡渠道基本都是国外电子钱包发行的,类似于国内的支付宝,不同的是除开少数几个支持人民币和国内银行充值的之外,其他基本都需要使用国外银行卡或者是电子钱包、信用卡充值,如果没有的话我们可以通过兑换的方式为该网站充值,具体兑换商可参照电子货币兑换网中国上面所说的兑换网站以及方法:电子货币兑换网中国:http://currencyexchange.net.cn/

  18. VirtualCards(支持支付宝充值) https://VirtualCards.us 50美元起充,注册成功无需充值既可出卡号

  19. payweb http://payweb.com (需要付费、只有实体卡)可以用银联进行充值!

  20. Solid Trust Pay http://SolidTrustPay.com

  21. Skrill(需要注册国外账户) http://www.skrill.com 要注册欧洲国家的资料才有开卡选项。

  22. Neteller(需要注册国外账户) www.neteller.com

  23. v-preca(需要日本ip注册 少数中国卡能够充值) http://vpc.lifecard.co.jp

  24. mun-prepaid(需要日本ip注册) 日元卡或者日本便利店充值 www.mun-prepaid.com

  25. Giftcardmall www.giftcardmall.com 此网站要美国信用卡或者是借记卡进行购买

  26. netspend(需翻墙 国外身份认证) www.Netspend.com

  27. vanilla(实体卡、需要国外身份或者是便利店购买) 也可以找我们进行购买。 www.vanilla.com

  28. 通汇香港 https://www.transforex.hk/ 此卡支持amazon googleplay paypal 等网站需要携带护照和身份证到香港总公司进行开卡!用身份证就能通过认证,可以开实体卡和虚拟卡

  29. Entropay 欧贝通 www.Entropay.com 不认证可以开五张卡,4067卡段,该卡可以用三三金融卡进行充值,可以自定义充值金额,认证过的账户可以开出10张卡片,可以自由决定充值的金额。欧贝通充值可以用 tapngo卡和三三金融进行充值,经本人测试是中国用户目前最好使的充值方法,tapngo和三三金融可以自行在香港购买。

  30. payoneer payoneer是目前非常不错的虚拟卡平台,身份证即可申请下来,遗憾的是申请到收到卡需要一个月左右的时间,值得一提的是payoneer更吸引我们的是他有美国银行账户、美元、欧元、日元、英镑银行账户可供我们申请选择,非常值得拥有。

  31. Mmvpaymmvpay 是新加坡的虚拟卡平台可以开出mastercard 虚拟卡,需要新加坡手机号码注册!经过测试,账户不用认证,甚至是不用充值,一个账户直接可以获取5张卡片信息,包含卡号,有效期和卡密信息

  32. paypal mastercard https://www.paypal.com/us/webapps/mpp/paypal-prepaid-mastercard 此卡是paypal美国发行的mastercard,支持大部分网站消费,绑定以及验证,但是需要美国护照、身份和银行卡信息申请,并且是需要真实的

  33. amazon mastercard https://www.amazon.co.jp/ 三井住友カード株式会社-amazon-mastercardゴード/dp/b0092vb6vkAmazon mastercard是amazon日本网站发行的mastercard虚拟卡账户,同样是需要日本身份证护照地址证明才能申请下来,专门针对日亚的mastercard。

  34. Cryptopaycryptopay 是一个数字交易平台同属4665卡段的虚拟卡,不认证可以开出虚拟卡,但是前提是必须用欧洲国家的地址以及资料进行注册!

  35. Capitalistcapitalist 是一个俄罗斯的电子钱包工具,目前不认证一个账户可以开2张mastercard虚拟卡,分别是一张欧元的一张,一张美元的,认证过后可以开通四张卡片,两张实体卡和两张虚拟卡。

  36. Unichangeunichange 是一个电子货币兑换平台,该平台提供欧元和美元两种币种的虚拟卡。Unichange.me如果你没有某些资料,某些材料,那么万能的商人一定可以满足的了你!

  37. PayzaPayza 也是一个电子钱包工具,类似于paypal之类的电子 钱包,这边主要介绍payza发行的mastercard虚拟卡,申请虚拟卡需要身份证和信用卡认证,可以用预付卡能看得到自己姓名的信用卡。

  38. mycard2go mycard2go是一个德国的虚拟卡,发卡行为wire bank ag卡种为visa,注册账户无需身份认证,但是需要进行充值了才能开卡,充值成功后自动开通卡片,卡种为欧元,需要用KLARNA网银或者是当地现金进行充值,也可以进行网银。

  39. Vandle https://app.vandle.jp/ vandle是一家日本的虚拟卡提供平台,它提供mastercard虚拟卡片,需要再日本的便利店进行充值,也可以用日本的信用卡网银进行充值

  40. Chocom http://www.chocom.jp/index.html Chocom也是一家日本的虚拟卡,可以在日本的便利店,或者是日本信用卡以及Chocom电子钱包进行充值。

  41. Docomokouza docomokouza为日本docomo发行的visa虚拟信用卡,甚至是注册无需审查即可申请visa虚拟卡,最短有效期仅10天,还有一种则为3年需要日本的电子货币或者是信用卡对其进行充值。 https://docomokouza.jpmastercard借记卡

  42. Nttsmarttrade nttsmarttrade是一家日本的在线虚拟卡平台,支持中文界面,非常方便,需要用日本信用卡段进行充值,中国和日本以外的mastercard无法进行充值。http://www.nttsmarttrade.co.jp/mastercardnet/cn/

42个虚拟信用卡开卡渠道
https://blog.ittst.com/posts/42-virtual-credit-card-opening-channels/
作者
浪子
发布于
2022-11-29
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +42个虚拟信用卡开卡渠道 - 平淡生活
1871 字
9 分钟
42个虚拟信用卡开卡渠道
  1. 全球付 http://www.globalcash.hk/ 在线申请,可充值,微信支付,开卡简单。

  2. 爱汇旅之卡 http://www.ihui.com/ 此卡是目前最方便容易获得,并大量获得的实体mastercard实体卡,可以直接联系客服大量拿卡,一次上百张甚至是数百张,该卡支持paypal、amazon、google等网站。

  3. Tap&go 拍住赏 http://tapngo.com.hk/ 可以支持微信,amazon、applepay 国际阿里云 GCE aws paypal等大部分网站,需要认证,买卡可以去香港总部或者某宝,最低100余额 充值可在香港便利店充值或者网上找人代充!

  4. 三三金融: https://cards.33finance.com 需要到香港公司进行开卡,也可以找某宝,开出来的卡适用于大部分网站,包括欧贝通/amazon/阿里云/paypal/等等等等,充值也需要到香港便利店或者是到公司充,也可以找人代充。

  5. Tierrapay www.tierrapay.com卡段4665 注册要用欧洲地址,比如英国,需要用pm或者是wmz充值,无需认证即可成功开卡。

  6. 通汇香港 https://www.transforex.hk/ 此卡要携带护照和身份证前往香港开通,该公司有礼品卡,固定金额每天限购买3张,经测试,此卡适用于paypal amazon ebay等平台

  7. Uphold www.uphold.com 需要护照和地址证明申请,支持银行 比特币进行充值

  8. Payeer http://www.zhesui.com/payeer/ 目前需要用欧洲国家的资料注册,

  9. Advcash 目前需要用欧洲国家的资料注册

  10. Moneypolo http://www.zhesui.com/moneypolo/需要完成实名认证,以及收费购买。

  11. Wirexapp http://www.zhesui.com/wirex-app-visa/ 4665卡段,目前需要用欧洲国家地址注册申请。没认证只能比特币充值。

  12. Payoneer派安盈 附带美国 日本 英国和欧洲银行账户 http://www.payoneer.com/

  13. okpay 需要用护照通过实名认证才能开卡。

  14. Qiwi https://qiwi.com/ 需要俄罗斯电话卡注册成功才能开卡 (俄罗斯卡可以去淘宝买一个)

  15. ecoPayz http://www.zhesui.com/ecopayz-card/ 目前需要认证,该卡支持大部分网站,可以无限移除替换卡片。

  16. 浦发E-GO卡(需要有浦发实体卡) http://www.zhesui.com/e-go/ 该卡可以开出银联 mastercard visa AME 四种卡片

  17. Yandexmoney money.yandex.ru 以上虚拟卡渠道基本都是国外电子钱包发行的,类似于国内的支付宝,不同的是除开少数几个支持人民币和国内银行充值的之外,其他基本都需要使用国外银行卡或者是电子钱包、信用卡充值,如果没有的话我们可以通过兑换的方式为该网站充值,具体兑换商可参照电子货币兑换网中国上面所说的兑换网站以及方法:电子货币兑换网中国:http://currencyexchange.net.cn/

  18. VirtualCards(支持支付宝充值) https://VirtualCards.us 50美元起充,注册成功无需充值既可出卡号

  19. payweb http://payweb.com (需要付费、只有实体卡)可以用银联进行充值!

  20. Solid Trust Pay http://SolidTrustPay.com

  21. Skrill(需要注册国外账户) http://www.skrill.com 要注册欧洲国家的资料才有开卡选项。

  22. Neteller(需要注册国外账户) www.neteller.com

  23. v-preca(需要日本ip注册 少数中国卡能够充值) http://vpc.lifecard.co.jp

  24. mun-prepaid(需要日本ip注册) 日元卡或者日本便利店充值 www.mun-prepaid.com

  25. Giftcardmall www.giftcardmall.com 此网站要美国信用卡或者是借记卡进行购买

  26. netspend(需翻墙 国外身份认证) www.Netspend.com

  27. vanilla(实体卡、需要国外身份或者是便利店购买) 也可以找我们进行购买。 www.vanilla.com

  28. 通汇香港 https://www.transforex.hk/ 此卡支持amazon googleplay paypal 等网站需要携带护照和身份证到香港总公司进行开卡!用身份证就能通过认证,可以开实体卡和虚拟卡

  29. Entropay 欧贝通 www.Entropay.com 不认证可以开五张卡,4067卡段,该卡可以用三三金融卡进行充值,可以自定义充值金额,认证过的账户可以开出10张卡片,可以自由决定充值的金额。欧贝通充值可以用 tapngo卡和三三金融进行充值,经本人测试是中国用户目前最好使的充值方法,tapngo和三三金融可以自行在香港购买。

  30. payoneer payoneer是目前非常不错的虚拟卡平台,身份证即可申请下来,遗憾的是申请到收到卡需要一个月左右的时间,值得一提的是payoneer更吸引我们的是他有美国银行账户、美元、欧元、日元、英镑银行账户可供我们申请选择,非常值得拥有。

  31. Mmvpaymmvpay 是新加坡的虚拟卡平台可以开出mastercard 虚拟卡,需要新加坡手机号码注册!经过测试,账户不用认证,甚至是不用充值,一个账户直接可以获取5张卡片信息,包含卡号,有效期和卡密信息

  32. paypal mastercard https://www.paypal.com/us/webapps/mpp/paypal-prepaid-mastercard 此卡是paypal美国发行的mastercard,支持大部分网站消费,绑定以及验证,但是需要美国护照、身份和银行卡信息申请,并且是需要真实的

  33. amazon mastercard https://www.amazon.co.jp/ 三井住友カード株式会社-amazon-mastercardゴード/dp/b0092vb6vkAmazon mastercard是amazon日本网站发行的mastercard虚拟卡账户,同样是需要日本身份证护照地址证明才能申请下来,专门针对日亚的mastercard。

  34. Cryptopaycryptopay 是一个数字交易平台同属4665卡段的虚拟卡,不认证可以开出虚拟卡,但是前提是必须用欧洲国家的地址以及资料进行注册!

  35. Capitalistcapitalist 是一个俄罗斯的电子钱包工具,目前不认证一个账户可以开2张mastercard虚拟卡,分别是一张欧元的一张,一张美元的,认证过后可以开通四张卡片,两张实体卡和两张虚拟卡。

  36. Unichangeunichange 是一个电子货币兑换平台,该平台提供欧元和美元两种币种的虚拟卡。Unichange.me如果你没有某些资料,某些材料,那么万能的商人一定可以满足的了你!

  37. PayzaPayza 也是一个电子钱包工具,类似于paypal之类的电子 钱包,这边主要介绍payza发行的mastercard虚拟卡,申请虚拟卡需要身份证和信用卡认证,可以用预付卡能看得到自己姓名的信用卡。

  38. mycard2go mycard2go是一个德国的虚拟卡,发卡行为wire bank ag卡种为visa,注册账户无需身份认证,但是需要进行充值了才能开卡,充值成功后自动开通卡片,卡种为欧元,需要用KLARNA网银或者是当地现金进行充值,也可以进行网银。

  39. Vandle https://app.vandle.jp/ vandle是一家日本的虚拟卡提供平台,它提供mastercard虚拟卡片,需要再日本的便利店进行充值,也可以用日本的信用卡网银进行充值

  40. Chocom http://www.chocom.jp/index.html Chocom也是一家日本的虚拟卡,可以在日本的便利店,或者是日本信用卡以及Chocom电子钱包进行充值。

  41. Docomokouza docomokouza为日本docomo发行的visa虚拟信用卡,甚至是注册无需审查即可申请visa虚拟卡,最短有效期仅10天,还有一种则为3年需要日本的电子货币或者是信用卡对其进行充值。 https://docomokouza.jpmastercard借记卡

  42. Nttsmarttrade nttsmarttrade是一家日本的在线虚拟卡平台,支持中文界面,非常方便,需要用日本信用卡段进行充值,中国和日本以外的mastercard无法进行充值。http://www.nttsmarttrade.co.jp/mastercardnet/cn/

42个虚拟信用卡开卡渠道
https://blog.ittst.com/posts/42-virtual-credit-card-opening-channels/
作者
浪子
发布于
2022-11-29
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/add-a-movie-viewing-page-to-the-blog/index.html b/posts/add-a-movie-viewing-page-to-the-blog/index.html index e0a36b0..929fa49 100644 --- a/posts/add-a-movie-viewing-page-to-the-blog/index.html +++ b/posts/add-a-movie-viewing-page-to-the-blog/index.html @@ -1,4 +1,4 @@ -给博客增加一个观影页面 - 平淡生活
471 字
2 分钟
给博客增加一个观影页面

前言#

使用插件构建的观影页面有点不那么喜欢,所以我决定自己写一个。

项目#

所使用的的项目地址 https://github.com/bigfa/douban-cf-worker

步骤#

  1. 首先根据https://github.com/bigfa/douban-cf-worker 中的步骤创建接口

  2. 在博客的根目录下新建一个名为 movies 的文件夹,然后在 movies 文件夹下新建一个名为 index.md 的文件,在文件中写入以下内容:

---
+给博客增加一个观影页面 - 平淡生活
471 字
2 分钟
给博客增加一个观影页面

前言#

使用插件构建的观影页面有点不那么喜欢,所以我决定自己写一个。

项目#

所使用的的项目地址 https://github.com/bigfa/douban-cf-worker

步骤#

  1. 首先根据https://github.com/bigfa/douban-cf-worker 中的步骤创建接口

  2. 在博客的根目录下新建一个名为 movies 的文件夹,然后在 movies 文件夹下新建一个名为 index.md 的文件,在文件中写入以下内容:

---
 title: 观影
 date: 2024-09-11 13:00:56
 ---
@@ -122,4 +122,4 @@
 .item-title a:hover {
     text-decoration: underline;
 }
-

如此即可大功告成了

给博客增加一个观影页面
https://blog.ittst.com/posts/add-a-movie-viewing-page-to-the-blog/
作者
浪子
发布于
2024-09-11
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

如此即可大功告成了

给博客增加一个观影页面
https://blog.ittst.com/posts/add-a-movie-viewing-page-to-the-blog/
作者
浪子
发布于
2024-09-11
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/add-artalk-comments-to-memos/index.html b/posts/add-artalk-comments-to-memos/index.html index 74c3eed..4768414 100644 --- a/posts/add-artalk-comments-to-memos/index.html +++ b/posts/add-artalk-comments-to-memos/index.html @@ -1,4 +1,4 @@ -给Memos添加Artalk评论 - 平淡生活
230 字
1 分钟
给Memos添加Artalk评论
2024-10-10

上文提到

给Memos添加Twikoo评论

  • 2023.10.23更新以适用于memos v0.16.1版本 把’.resource-wrapper’替换为’.gap-2’

  • 2023.10.17更新memos0.16版本

自定义脚本#

把’.resource-wrapper’替换为’.memo-wrapper’

自定义样式#

隐藏评论数

.text-sm.text-gray-500.ml-1{display:none !important;}
+给Memos添加Artalk评论 - 平淡生活
230 字
1 分钟
给Memos添加Artalk评论
2024-10-10

上文提到

给Memos添加Twikoo评论

  • 2023.10.23更新以适用于memos v0.16.1版本 把’.resource-wrapper’替换为’.gap-2’

  • 2023.10.17更新memos0.16版本

自定义脚本#

把’.resource-wrapper’替换为’.memo-wrapper’

自定义样式#

隐藏评论数

.text-sm.text-gray-500.ml-1{display:none !important;}
 
  • 2023.9.26更新提醒:适用于 memos 0.15.1版本以下

自定义脚本#

// 用 JS 向页面中插入 JS
 function addArtalkJS() { 
     var memosArtalk = document.createElement("script");
@@ -49,4 +49,4 @@
 

自定义样式#

a.time-text:after { content: '   评论 💬 '; }
 .atk-main-editor { margin-top: 20px; }
 
-
给Memos添加Artalk评论
https://blog.ittst.com/posts/add-artalk-comments-to-memos/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
给Memos添加Artalk评论
https://blog.ittst.com/posts/add-artalk-comments-to-memos/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/add-twikoo-comments-to-memos/index.html b/posts/add-twikoo-comments-to-memos/index.html index 6fb05a0..08db83f 100644 --- a/posts/add-twikoo-comments-to-memos/index.html +++ b/posts/add-twikoo-comments-to-memos/index.html @@ -1,4 +1,4 @@ -给Memos添加Twikoo评论 - 平淡生活
577 字
3 分钟
给Memos添加Twikoo评论
2024-10-10

代码来自于@林木木

2023.10.23更新脚本以适用于memos v0.16.1

自定义脚本#

// Memos v0.16.1 单条页面插入 Twikoo 评论
+给Memos添加Twikoo评论 - 平淡生活
577 字
3 分钟
给Memos添加Twikoo评论
2024-10-10

代码来自于@林木木

2023.10.23更新脚本以适用于memos v0.16.1

自定义脚本#

// Memos v0.16.1 单条页面插入 Twikoo 评论
 var twikooENV = 'https://你的.com/'
 function addTwikooJS() { 
   var memosTwikoo = document.createElement("script");
@@ -131,4 +131,4 @@
 .btns-container.space-x-2{margin-right:1.5rem;}
 .action-button-container{color: #e5e7eb;}
 .action-button-container a{display:none !important;}
-
给Memos添加Twikoo评论
https://blog.ittst.com/posts/add-twikoo-comments-to-memos/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
给Memos添加Twikoo评论
https://blog.ittst.com/posts/add-twikoo-comments-to-memos/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/ali-goku-service-offline/index.html b/posts/ali-goku-service-offline/index.html index c6f73ee..5e7916d 100644 --- a/posts/ali-goku-service-offline/index.html +++ b/posts/ali-goku-service-offline/index.html @@ -1 +1 @@ -阿里悟空服务下线 - 平淡生活
188 字
1 分钟
阿里悟空服务下线

阿里悟空服务宣布于2016年10月31号正式下线,基于阿里悟空的phpwind移动版,基本上也可以宣告死亡了。 实际上phpwind早在两年前已经停止更新维护,目前的社区论坛程序discuz也处于停止更新维护的状态,伴随了广大草根站长走过十年岁月的两大社区程序也算是完成了自己的使命。 一直对社交网络不死心的阿里也放弃了pw是不是意味着社区论坛就此消亡。或者说,在将来不再会有个人草根站长了?毕竟网站开发维护的成本对于非IT人员来讲实在太过于高昂

阿里悟空服务下线
https://blog.ittst.com/posts/ali-goku-service-offline/
作者
浪子
发布于
2016-11-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +阿里悟空服务下线 - 平淡生活
188 字
1 分钟
阿里悟空服务下线

阿里悟空服务宣布于2016年10月31号正式下线,基于阿里悟空的phpwind移动版,基本上也可以宣告死亡了。 实际上phpwind早在两年前已经停止更新维护,目前的社区论坛程序discuz也处于停止更新维护的状态,伴随了广大草根站长走过十年岁月的两大社区程序也算是完成了自己的使命。 一直对社交网络不死心的阿里也放弃了pw是不是意味着社区论坛就此消亡。或者说,在将来不再会有个人草根站长了?毕竟网站开发维护的成本对于非IT人员来讲实在太过于高昂

阿里悟空服务下线
https://blog.ittst.com/posts/ali-goku-service-offline/
作者
浪子
发布于
2016-11-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/artalk-comments-using-qq-robot-notification/index.html b/posts/artalk-comments-using-qq-robot-notification/index.html index d5dd7ce..9ad77a0 100644 --- a/posts/artalk-comments-using-qq-robot-notification/index.html +++ b/posts/artalk-comments-using-qq-robot-notification/index.html @@ -1,4 +1,4 @@ -Artalk评论使用QQ机器人通知 - 平淡生活
417 字
2 分钟
Artalk评论使用QQ机器人通知

前言#

上文使用Docker快速部署一个memos的QQ机器人介绍了QQ机器人的部署方法

本次将介绍如何使用QQ机器人接收Artalk的评论通知 实现原理是利用Artalk的Webhook功能

准备#

  1. 确保Artalk已经部署完成
  2. 确保QQ机器人已经部署完成

使用#

QQ机器人#

确保QQ机器人的管理页面开启了HTTP服务,且端口为3000

访问IP:3000 出现以下页面则说明QQ机器人已经开启了HTTP服务

{
+Artalk评论使用QQ机器人通知 - 平淡生活
417 字
2 分钟
Artalk评论使用QQ机器人通知

前言#

上文使用Docker快速部署一个memos的QQ机器人介绍了QQ机器人的部署方法

本次将介绍如何使用QQ机器人接收Artalk的评论通知 实现原理是利用Artalk的Webhook功能

准备#

  1. 确保Artalk已经部署完成
  2. 确保QQ机器人已经部署完成

使用#

QQ机器人#

确保QQ机器人的管理页面开启了HTTP服务,且端口为3000

访问IP:3000 出现以下页面则说明QQ机器人已经开启了HTTP服务

{
   "status": "failed",
   "retcode": 200,
   "data": null,
@@ -17,4 +17,4 @@
 

构建规则填写

{
   "content": " $name 在 $site 上评论啦 \n 内容:$content \n 时间:$time \n 链接:$url?atk_comment=$id"
 }
-

提交之后 点击复制webhook地址

Artalk配置#

在Artalk的后台管理页面,进入设置->多元推送->Webhook

填入之前复制的webhook地址

如此即可在artalk有人评论时QQ机器人通知你的QQ啦!

Artalk评论使用QQ机器人通知
https://blog.ittst.com/posts/artalk-comments-using-qq-robot-notification/
作者
浪子
发布于
2024-09-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

提交之后 点击复制webhook地址

Artalk配置#

在Artalk的后台管理页面,进入设置->多元推送->Webhook

填入之前复制的webhook地址

如此即可在artalk有人评论时QQ机器人通知你的QQ啦!

Artalk评论使用QQ机器人通知
https://blog.ittst.com/posts/artalk-comments-using-qq-robot-notification/
作者
浪子
发布于
2024-09-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html b/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html index 8e90a1b..6548ae0 100644 --- a/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html +++ b/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html @@ -1 +1 @@ -华硕b150m-et m2+rx560黑苹果oc0.8.5引导 - 平淡生活
133 字
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
无标签

配置如下#

cpu:魔改qhpw 2.2g hz 主板:华硕b150m-et m2 内存:8g ddr4 2133mhz 硬盘:nvme 256gb ssd 显卡:肥猫家rx560 4gb 网卡:bcm94360cd 电源:长城额定300w 机箱:乔思伯c2黑色

乔思伯这个机箱是个大闷罐,但是显卡功耗低,双烤温度最高75摄氏度

截图#

Jietu20221020-144354.jpg Jietu20221021-145738.jpg

bios设置#

关闭 CSM兼容性 关闭 VT-D 关闭 串口 打开 USB handoff 关闭 CFG LOCK

已驱动#

声卡 网卡 显卡 电源管理 显卡加速 Jietu20221021-152807.jpg

引导下载#

下载地址

华硕b150m-et m2+rx560黑苹果oc0.8.5引导
https://blog.ittst.com/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/
作者
浪子
发布于
2022-10-21
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +华硕b150m-et m2+rx560黑苹果oc0.8.5引导 - 平淡生活
133 字
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
无标签

配置如下#

cpu:魔改qhpw 2.2g hz 主板:华硕b150m-et m2 内存:8g ddr4 2133mhz 硬盘:nvme 256gb ssd 显卡:肥猫家rx560 4gb 网卡:bcm94360cd 电源:长城额定300w 机箱:乔思伯c2黑色

乔思伯这个机箱是个大闷罐,但是显卡功耗低,双烤温度最高75摄氏度

截图#

Jietu20221020-144354.jpg Jietu20221021-145738.jpg

bios设置#

关闭 CSM兼容性 关闭 VT-D 关闭 串口 打开 USB handoff 关闭 CFG LOCK

已驱动#

声卡 网卡 显卡 电源管理 显卡加速 Jietu20221021-152807.jpg

引导下载#

下载地址

华硕b150m-et m2+rx560黑苹果oc0.8.5引导
https://blog.ittst.com/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/
作者
浪子
发布于
2022-10-21
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/black-apple-solid--state-pit-guideline/index.html b/posts/black-apple-solid--state-pit-guideline/index.html index dda09c3..70574dd 100644 --- a/posts/black-apple-solid--state-pit-guideline/index.html +++ b/posts/black-apple-solid--state-pit-guideline/index.html @@ -1 +1 @@ -黑苹果固态避坑指南 - 平淡生活
636 字
3 分钟
黑苹果固态避坑指南

三星 PM961 / PM981 / PM981a / PM991 会导致 macOS 无法安装或正常运行

三星 983ZET无法安装 macOS;

2019 年 5 月以前出厂的 三星 970 EVO Plus 可能存在和 PM9x1 系列类似的问题,但可以通过在Windows环境升级官方固件解决 macOS 兼容问题;

镁光 2200S无法安装或稳定运行 macOS;

爱国者 P2000 256GB无法通过 10.15、11.x、12.x 任何一个版本的正常安装流程,但不排除个例的可能;

macOS 不支持使用 Intel 傲腾(Optane Memory)或镁光 3D XPoint 进行加速的笔记本电脑;

下面的型号是与 macOS IONVMeFamily 兼容性不佳的型号(可能无故卡住或运行不正常)#

英特尔 600P/660P/760P 系列

金士顿 A2000:配置 S5Z42105控制器的版本必须搭配NVMeFix.kext 1.0.8 及以上,也可能完全无法安装;

海力士 PC601/PC611/PC711/BC501:主要见于联想和戴尔笔记本,部分批次正常部分会卡住;

技嘉 GIGABYTE M.2 PCIe SSD(比如 GP-GSM2NE8512GNTD

威刚 剑鱼 ADATA Swordfish 2 TB M.2-2280

海力士 SK Hynix HFS001TD9TNG-L5B0B

海力士 SK Hynix P31

镁光 Micron 2200V MTFDHBA512TCK -移速的256G同样使用的镁光颗粒无法安装;

阿斯加特 Asgard AN3+ (STAR1000P)

朗科 Netac NVME SSD 480

西部数据 SN550/570/730/750/850都能正常安装和运行 macOS;

三星 970EVO/Pro/Plus(升级固件后)和 980/980 Pro 都能正常安装和运行 macOS,但是此系列存在 TRIM支持问题;

海盗船 MP400/MP600系列均能正常安装运行 macOS;

绝大部分常见的 SATA 接口固态盘都能正常安装和运行 macOS;

不完全支持TRIM(主要影响特定条件下的写入速度,什么是 TRIM?),但安装运行正常的型号:#

三星 Samsung 950 Pro

三星 Samsung 960 Evo/Pro

三星 Samsung 970 Evo/Pro

「重要提示」在 macOS 12.0 及以上版本中,OpenCore 无法再修改 APFS 文件系统的 TRIM超时数值,部分执行 TRIM相对较慢的固态硬盘(主要是三星的控制器)将没有足够的时间执行 TRIM 操作。 不正确的设置可能导致进入系统缓慢,因此对 macOS TRIM支持度不佳的硬盘建议将 SetApfsTrimTimeout值改成 0 以关闭 TRIM,或 -1 以关闭该功能。此现象在 12.3 及以上的版本中尤其明显。

完整支持 macOS TRIM 的型号:#

西部数据 SN5xx/7xx 系列(未完全测试)

英睿达 Crucial P1 1TB NVME(SM2263EN,未完全测试)

金典 KingDian S280(SATA)

浦科特 PLEXTOR M5Pro(SATA)

三星 Samsung 850 PRO(SATA,未完全测试)

三星 Samsung 870 EVO(SATA,未完全测试)

黑苹果固态避坑指南
https://blog.ittst.com/posts/black-apple-solid--state-pit-guideline/
作者
浪子
发布于
2022-04-12
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +黑苹果固态避坑指南 - 平淡生活
636 字
3 分钟
黑苹果固态避坑指南

三星 PM961 / PM981 / PM981a / PM991 会导致 macOS 无法安装或正常运行

三星 983ZET无法安装 macOS;

2019 年 5 月以前出厂的 三星 970 EVO Plus 可能存在和 PM9x1 系列类似的问题,但可以通过在Windows环境升级官方固件解决 macOS 兼容问题;

镁光 2200S无法安装或稳定运行 macOS;

爱国者 P2000 256GB无法通过 10.15、11.x、12.x 任何一个版本的正常安装流程,但不排除个例的可能;

macOS 不支持使用 Intel 傲腾(Optane Memory)或镁光 3D XPoint 进行加速的笔记本电脑;

下面的型号是与 macOS IONVMeFamily 兼容性不佳的型号(可能无故卡住或运行不正常)#

英特尔 600P/660P/760P 系列

金士顿 A2000:配置 S5Z42105控制器的版本必须搭配NVMeFix.kext 1.0.8 及以上,也可能完全无法安装;

海力士 PC601/PC611/PC711/BC501:主要见于联想和戴尔笔记本,部分批次正常部分会卡住;

技嘉 GIGABYTE M.2 PCIe SSD(比如 GP-GSM2NE8512GNTD

威刚 剑鱼 ADATA Swordfish 2 TB M.2-2280

海力士 SK Hynix HFS001TD9TNG-L5B0B

海力士 SK Hynix P31

镁光 Micron 2200V MTFDHBA512TCK -移速的256G同样使用的镁光颗粒无法安装;

阿斯加特 Asgard AN3+ (STAR1000P)

朗科 Netac NVME SSD 480

西部数据 SN550/570/730/750/850都能正常安装和运行 macOS;

三星 970EVO/Pro/Plus(升级固件后)和 980/980 Pro 都能正常安装和运行 macOS,但是此系列存在 TRIM支持问题;

海盗船 MP400/MP600系列均能正常安装运行 macOS;

绝大部分常见的 SATA 接口固态盘都能正常安装和运行 macOS;

不完全支持TRIM(主要影响特定条件下的写入速度,什么是 TRIM?),但安装运行正常的型号:#

三星 Samsung 950 Pro

三星 Samsung 960 Evo/Pro

三星 Samsung 970 Evo/Pro

「重要提示」在 macOS 12.0 及以上版本中,OpenCore 无法再修改 APFS 文件系统的 TRIM超时数值,部分执行 TRIM相对较慢的固态硬盘(主要是三星的控制器)将没有足够的时间执行 TRIM 操作。 不正确的设置可能导致进入系统缓慢,因此对 macOS TRIM支持度不佳的硬盘建议将 SetApfsTrimTimeout值改成 0 以关闭 TRIM,或 -1 以关闭该功能。此现象在 12.3 及以上的版本中尤其明显。

完整支持 macOS TRIM 的型号:#

西部数据 SN5xx/7xx 系列(未完全测试)

英睿达 Crucial P1 1TB NVME(SM2263EN,未完全测试)

金典 KingDian S280(SATA)

浦科特 PLEXTOR M5Pro(SATA)

三星 Samsung 850 PRO(SATA,未完全测试)

三星 Samsung 870 EVO(SATA,未完全测试)

黑苹果固态避坑指南
https://blog.ittst.com/posts/black-apple-solid--state-pit-guideline/
作者
浪子
发布于
2022-04-12
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/centos-appears-at-yum/index.html b/posts/centos-appears-at-yum/index.html index 57ffd7d..d41d404 100644 --- a/posts/centos-appears-at-yum/index.html +++ b/posts/centos-appears-at-yum/index.html @@ -1,6 +1,6 @@ -centos在yum时出现Determining fastest mirrors - 平淡生活
183 字
1 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05

问题1#

yum makecache时,停在Determining fastest mirrors,一直在判断最快镜像,由于已经指定了yum源,所以不需要些插件,可以用动禁用。

解决方法:

修改/etc/yum/pluginconf.d/fastestmirror.conf里面的enabled=0

修改/etc/yum.conf里面的plugins=0

问题解决。

问题2#

Could not retrieve mirrorlist http://mirrors.elrepo.org/mirrors-elrepo.el7 error was 12: Timeout on http://mirrors.elrepo.org/mirrors-elrepo.el7: (28, ‘Connection timed out after 30001 milliseconds’)

镜像列表http://mirrors.elrepo.org/mirrors-elrepo.el7 的地址无法访问

解决方法

更新ELRepo 软件仓库镜像 首先按照官网的安装说明,配置 ELRepo:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
+centos在yum时出现Determining fastest mirrors - 平淡生活
183 字
1 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05

问题1#

yum makecache时,停在Determining fastest mirrors,一直在判断最快镜像,由于已经指定了yum源,所以不需要些插件,可以用动禁用。

解决方法:

修改/etc/yum/pluginconf.d/fastestmirror.conf里面的enabled=0

修改/etc/yum.conf里面的plugins=0

问题解决。

问题2#

Could not retrieve mirrorlist http://mirrors.elrepo.org/mirrors-elrepo.el7 error was 12: Timeout on http://mirrors.elrepo.org/mirrors-elrepo.el7: (28, ‘Connection timed out after 30001 milliseconds’)

镜像列表http://mirrors.elrepo.org/mirrors-elrepo.el7 的地址无法访问

解决方法

更新ELRepo 软件仓库镜像 首先按照官网的安装说明,配置 ELRepo:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
 

按照你的系统版本,运行:

yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
 

接下来是换源,建议先备份 /etc/yum.repos.d/elrepo.repo

cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak
 

然后编辑/etc/yum.repos.d/elrepo.repo 文件,在 mirrorlist=后的地址替换为

https://mirrors.tuna.tsinghua.edu.cn/elrepo
 

最后,更新软件包缓存

yum makecache
-
centos在yum时出现Determining fastest mirrors
https://blog.ittst.com/posts/centos-appears-at-yum/
作者
浪子
发布于
2023-10-05
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
centos在yum时出现Determining fastest mirrors
https://blog.ittst.com/posts/centos-appears-at-yum/
作者
浪子
发布于
2023-10-05
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html b/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html index 869e9c0..6b8f990 100644 --- a/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html +++ b/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html @@ -1,8 +1,8 @@ -CentOS系统时间和时区查看以及修改的方法 - 平淡生活
120 字
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14

一、时间修改 远程连接到centos 或者直接登录系统

date 
+CentOS系统时间和时区查看以及修改的方法 - 平淡生活
120 字
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14

一、时间修改 远程连接到centos 或者直接登录系统

date 
 

查看系统时间

date -s 
 

修改时间 看下面的例子

date -s  03/04/2013
 

(将系统日期设定为2013年03月04日)

date -s  110:38
 

(将系统时间设定为上午 10:38)

二、时区修改

先查看时区

date -R  
 

修改时区: (将Asia/shanghai-上海时区写入当前时区)

cp -f /usr/share/zoneinfo/Asia/Shanghai     /etc/localtime 
 

提示是否覆盖,输入Y回车, 然后

date
-

查看时区和时间(CST,中国时区)

CentOS系统时间和时区查看以及修改的方法
https://blog.ittst.com/posts/centos-system-time-and-time-zone-viewing-and-modification-method/
作者
浪子
发布于
2016-11-14
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

查看时区和时间(CST,中国时区)

CentOS系统时间和时区查看以及修改的方法
https://blog.ittst.com/posts/centos-system-time-and-time-zone-viewing-and-modification-method/
作者
浪子
发布于
2016-11-14
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/cloud-torrent-for-centos-one--click-installation/index.html b/posts/cloud-torrent-for-centos-one--click-installation/index.html index 1b8ade5..3e44ec2 100644 --- a/posts/cloud-torrent-for-centos-one--click-installation/index.html +++ b/posts/cloud-torrent-for-centos-one--click-installation/index.html @@ -1,2 +1,2 @@ -Cloud Torrent for centos一键安装 - 平淡生活
863 字
4 分钟
Cloud Torrent for centos一键安装

支持 离线下载 BT和磁力链接和边下边播 的老司机坐骑 —— Cloud Torrent 声明:本文章仅提供 BT/磁力链接 下载工具的安装方法和说明,任何使用此工具 下载版权侵权文件或导致任何经济损失,皆和本人无任何关系!如果你不同意或有异议,请关闭这个网页! 10-1.png

  • 系统需求 CentOS / Debian / Ubuntu 都可以,因为是 Go语言写的

  • 脚本版本: Ver: 1.0.3

  • Cloud Torrent特点 支持 BT下载 支持 磁力链接下载 支持 搜索磁力链接 支持 离线下载 支持 边下边播( 格式限制:mp4/wbem/ogg,同时需要手动输入链接) 可视化界面 Web UI

  • 安装步骤

    wget -N —no-check-certificate https://www.xuanlove.download/sh/cloudt.sh && chmod +x cloudt.sh && bash cloudt.sh

下载运行完毕脚本,就会直接开始安装 Cloud Torrent ,安装过程中如果出现让你选择Y和N的,都选Y。 安装完成之后,就会提醒你,输入要开放的端口(推荐:默认 8000) 启动后,访问 http://VPS_IP:8000 即可看到Web UI界面了。

  • 脚本使用说明

    bash cloudt.sh #可以直接输入这个命令,会自动判断是否需要 安装/启动/停止 Cloud Torrent   bash cloudt.sh install #安装 Cloud Torrent   bash cloudt.sh start #启动 Cloud Torrent   bash cloudt.sh stop #停止 Cloud Torrent   bash cloudt.sh tail #查看 Cloud Torrent 日志   bash cloudt.sh uninstall #卸载 Cloud Torrent

  • Cloud Torrent使用说明 Cloud Torrent可以直接在输入中输入 磁力链接 或者 在线的BT种子(不支持本地上传),点击下面的 蓝色的按钮,就会开始解析资源。


按钮说明#

成功解析后,就会显示如下的界面,开始下载。 Files 是查看正在下载的文件列表, Start 是启动下载(默认解析后直接启动下载), Stop 是停止下载。 还有,如果你下载完毕或者点了 Stop 停止下载,那么 Stop 就会变成 Remove 删除任务的按钮了。

搜索磁力链接#

Cloud Torrent支持搜索磁力链接,在输入栏中直接输入你要搜索的文件名称,同时点击 绿色的按钮 选择一个搜索源,然后点击 蓝色的Search 按钮就可以搜索了。 注意:Cloud Torrent是国外人写的,所以这些搜索源均是国外的磁力链接网站,搜索到的资源基本没有中文的,所以非特殊需求的这个功能就没什么卵用了。

注意事项#

BT和磁力链接的速度是和, 磁力链接/BT 的用户上传共享量 和 中心服务器的宽带质量,以及你下载 磁力链接/BT 的VPS的宽带有关系。 这种软件在某些程度上比不上 国内的迅雷,毕竟迅雷 用户了很大共享了很多的上传速度,而且还有缓存的中心服务器,所以才会那么快。 如果你是国外的VPS,特别是美国的,一定要注意下载 BT/磁力链接 容易遇到蜜罐,然后被投诉封VPS。建议使用欧洲的罗马尼亚,那里的VPS无视版权,当然拉回本地,速度肯定也不会多快

无法访问你的 http://IP:端口#

可能是防火墙规则的问题,使用下面这个命令来开放端口

iptables -I INPUT -p tcp --dport 端口 -j ACCEPT
-
Cloud Torrent for centos一键安装
https://blog.ittst.com/posts/cloud-torrent-for-centos-one--click-installation/
作者
浪子
发布于
2017-05-27
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +Cloud Torrent for centos一键安装 - 平淡生活
863 字
4 分钟
Cloud Torrent for centos一键安装

支持 离线下载 BT和磁力链接和边下边播 的老司机坐骑 —— Cloud Torrent 声明:本文章仅提供 BT/磁力链接 下载工具的安装方法和说明,任何使用此工具 下载版权侵权文件或导致任何经济损失,皆和本人无任何关系!如果你不同意或有异议,请关闭这个网页! 10-1.png

  • 系统需求 CentOS / Debian / Ubuntu 都可以,因为是 Go语言写的

  • 脚本版本: Ver: 1.0.3

  • Cloud Torrent特点 支持 BT下载 支持 磁力链接下载 支持 搜索磁力链接 支持 离线下载 支持 边下边播( 格式限制:mp4/wbem/ogg,同时需要手动输入链接) 可视化界面 Web UI

  • 安装步骤

    wget -N —no-check-certificate https://www.xuanlove.download/sh/cloudt.sh && chmod +x cloudt.sh && bash cloudt.sh

下载运行完毕脚本,就会直接开始安装 Cloud Torrent ,安装过程中如果出现让你选择Y和N的,都选Y。 安装完成之后,就会提醒你,输入要开放的端口(推荐:默认 8000) 启动后,访问 http://VPS_IP:8000 即可看到Web UI界面了。

  • 脚本使用说明

    bash cloudt.sh #可以直接输入这个命令,会自动判断是否需要 安装/启动/停止 Cloud Torrent   bash cloudt.sh install #安装 Cloud Torrent   bash cloudt.sh start #启动 Cloud Torrent   bash cloudt.sh stop #停止 Cloud Torrent   bash cloudt.sh tail #查看 Cloud Torrent 日志   bash cloudt.sh uninstall #卸载 Cloud Torrent

  • Cloud Torrent使用说明 Cloud Torrent可以直接在输入中输入 磁力链接 或者 在线的BT种子(不支持本地上传),点击下面的 蓝色的按钮,就会开始解析资源。


按钮说明#

成功解析后,就会显示如下的界面,开始下载。 Files 是查看正在下载的文件列表, Start 是启动下载(默认解析后直接启动下载), Stop 是停止下载。 还有,如果你下载完毕或者点了 Stop 停止下载,那么 Stop 就会变成 Remove 删除任务的按钮了。

搜索磁力链接#

Cloud Torrent支持搜索磁力链接,在输入栏中直接输入你要搜索的文件名称,同时点击 绿色的按钮 选择一个搜索源,然后点击 蓝色的Search 按钮就可以搜索了。 注意:Cloud Torrent是国外人写的,所以这些搜索源均是国外的磁力链接网站,搜索到的资源基本没有中文的,所以非特殊需求的这个功能就没什么卵用了。

注意事项#

BT和磁力链接的速度是和, 磁力链接/BT 的用户上传共享量 和 中心服务器的宽带质量,以及你下载 磁力链接/BT 的VPS的宽带有关系。 这种软件在某些程度上比不上 国内的迅雷,毕竟迅雷 用户了很大共享了很多的上传速度,而且还有缓存的中心服务器,所以才会那么快。 如果你是国外的VPS,特别是美国的,一定要注意下载 BT/磁力链接 容易遇到蜜罐,然后被投诉封VPS。建议使用欧洲的罗马尼亚,那里的VPS无视版权,当然拉回本地,速度肯定也不会多快

无法访问你的 http://IP:端口#

可能是防火墙规则的问题,使用下面这个命令来开放端口

iptables -I INPUT -p tcp --dport 端口 -j ACCEPT
+
Cloud Torrent for centos一键安装
https://blog.ittst.com/posts/cloud-torrent-for-centos-one--click-installation/
作者
浪子
发布于
2017-05-27
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html b/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html index d352334..999d8fd 100644 --- a/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html +++ b/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html @@ -1,5 +1,5 @@ -通过取子集的方式压缩霞鹜文楷字体 - 平淡生活
199 字
1 分钟
通过取子集的方式压缩霞鹜文楷字体

使用python#

这里使用到的是Python 的库:fonttools

使用最新版 Python 的 pip 命令安装即可在 Shell 中使用:

pip install fonttools
+通过取子集的方式压缩霞鹜文楷字体 - 平淡生活
199 字
1 分钟
通过取子集的方式压缩霞鹜文楷字体

使用python#

这里使用到的是Python 的库:fonttools

使用最新版 Python 的 pip 命令安装即可在 Shell 中使用:

pip install fonttools
 

常用汉字大约有3500字 我使用的是这个现代汉语常用 3500 字.txt 中文常用字库项目https://github.com/DavidSheh/CommonChineseCharacter

取子集#

使用以下命令即可对字体文件取子集

fonttools subset "$input_file" --text-file="$text_file" --output-file="$output_file"
 

其中 $input_file:输入的字体文件。 $text_file:定义保留字符的纯文本文件路径。 $output_file:输出的字体文件路径。

取完子集完成之后字体从11M压缩到1.7M左右

压缩#

安装模块brotli

pip install brotli
 

使用命令

fonttools ttLib.woff2 compress "$input_file" -o "$output_file"
-

其中 $input_file:输入的字体文件。 $output_file:输出的字体文件路径。

再次压缩为 woff2 字体格式 大约840kb

通过取子集的方式压缩霞鹜文楷字体
https://blog.ittst.com/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/
作者
浪子
发布于
2024-09-03
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

其中 $input_file:输入的字体文件。 $output_file:输出的字体文件路径。

再次压缩为 woff2 字体格式 大约840kb

通过取子集的方式压缩霞鹜文楷字体
https://blog.ittst.com/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/
作者
浪子
发布于
2024-09-03
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/deploy-alist-in-fly.io/index.html b/posts/deploy-alist-in-fly.io/index.html index 54dab82..6778e64 100644 --- a/posts/deploy-alist-in-fly.io/index.html +++ b/posts/deploy-alist-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署Alist - 平淡生活
188 字
1 分钟
在fly.io部署Alist
2024-01-27

安装flyctl#

此处以Windows安装为例

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
+在fly.io部署Alist - 平淡生活
188 字
1 分钟
在fly.io部署Alist
2024-01-27

安装flyctl#

此处以Windows安装为例

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
 

初始化#

flyctl launch
 

按照提示创建一个app image 选择N会跳出网页要求填写 image APP name 自己设置 port 为5244 RAM选择256MB

创建一个1G的可持久卷#

flyctl volumes create alist_data --region hkg --size 1
 

编辑fly.toml#

参照以下内容编辑

app = "alist"
@@ -31,4 +31,4 @@
 

部署#

flyctl deploy
 

等待完成,会得到一个网址

演示#

https://so4.fly.dev

获取管理员密码#

进入SSH

flyctl ssh console
 

执行

./alist admin set NEW_PASSWORD
-

NEW_PASSWORD为自己设置的密码

在fly.io部署Alist
https://blog.ittst.com/posts/deploy-alist-in-fly.io/
作者
浪子
发布于
2024-01-27
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

NEW_PASSWORD为自己设置的密码

在fly.io部署Alist
https://blog.ittst.com/posts/deploy-alist-in-fly.io/
作者
浪子
发布于
2024-01-27
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/deploy-gotosocial-in-fly.io/index.html b/posts/deploy-gotosocial-in-fly.io/index.html index 412a7dc..d04d10e 100644 --- a/posts/deploy-gotosocial-in-fly.io/index.html +++ b/posts/deploy-gotosocial-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署Gotosocial - 平淡生活
490 字
2 分钟
在fly.io部署Gotosocial

关于Gotosocial#

GoToSocial 是一个十分轻量(轻量到甚至没有用户界面,需要使用第三方程序登录、兼容 Mastodon 应用进行使用)的 ActivityPub 联邦社交网络程序,自建 GoToSocial 可以避免您的信息因为所在实例倒闭、不可抗力等原因化为乌有。

准备#

  • 注册 Fly.io 账号,并绑卡(避免滥用);
  • 注册 Cloudflare 并启用 R2,启用 R2 需要绑卡。新建一个储存桶并创建一个 API 令牌。

安装 flyctl#

  • Linux
curl -L https://fly.io/install.sh | sh
+在fly.io部署Gotosocial - 平淡生活
490 字
2 分钟
在fly.io部署Gotosocial

关于Gotosocial#

GoToSocial 是一个十分轻量(轻量到甚至没有用户界面,需要使用第三方程序登录、兼容 Mastodon 应用进行使用)的 ActivityPub 联邦社交网络程序,自建 GoToSocial 可以避免您的信息因为所在实例倒闭、不可抗力等原因化为乌有。

准备#

  • 注册 Fly.io 账号,并绑卡(避免滥用);
  • 注册 Cloudflare 并启用 R2,启用 R2 需要绑卡。新建一个储存桶并创建一个 API 令牌。

安装 flyctl#

  • Linux
curl -L https://fly.io/install.sh | sh
 
  • macOS
curl -L https://fly.io/install.sh | sh
 
  • Windows,需要开启 RemoteSigned: 管理员运行
 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
 
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"
@@ -49,4 +49,4 @@
 
  • 创建用户
/gotosocial/gotosocial admin account create --username YOUR_USERNAME --email YOUR@EMAIL.COM --password 'SOME_VERY_GOOD_PASSWD'
 

YOUR_USERNAME为用户名 YOUR@EMAIL.COM为邮箱 SOME_VERY_GOOD_PASSWD为密码,需设置足够复杂,太简单会提示密码不够安全,需重新设置

  • 设置管理员
/gotosocial/gotosocial admin account promote --username YOUR_USERNAME
 

演示#

https://m.ima.cm

https://m.ima.cm/@jkjoy

下载数据库#

fly.toml文件目录执行

flyctl sftp get /gotosocial/storage/sqlite.db
-
在fly.io部署Gotosocial
https://blog.ittst.com/posts/deploy-gotosocial-in-fly.io/
作者
浪子
发布于
2023-08-17
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
在fly.io部署Gotosocial
https://blog.ittst.com/posts/deploy-gotosocial-in-fly.io/
作者
浪子
发布于
2023-08-17
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/deploy-the-artalk-review-system-in-fly.io/index.html b/posts/deploy-the-artalk-review-system-in-fly.io/index.html index 610b5dc..6eb77a5 100644 --- a/posts/deploy-the-artalk-review-system-in-fly.io/index.html +++ b/posts/deploy-the-artalk-review-system-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署artalk评论系统 - 平淡生活
191 字
1 分钟
在fly.io部署artalk评论系统
2023-08-15

众所周知Fly.io是一个免费的SAAS平台 提供三个内存为256MB的服务器,总3G硬盘空间. 为防止滥用,需要绑定信用卡.

准备#

安装官方的命令行工具flyctl

初始化#

flyctl launch
+在fly.io部署artalk评论系统 - 平淡生活
191 字
1 分钟
在fly.io部署artalk评论系统
2023-08-15

众所周知Fly.io是一个免费的SAAS平台 提供三个内存为256MB的服务器,总3G硬盘空间. 为防止滥用,需要绑定信用卡.

准备#

安装官方的命令行工具flyctl

初始化#

flyctl launch
 

根据提示创建一个app

创建一个1G的硬盘#

1G的硬盘用来储存评论数据绰绰有余了

flyctl volumes create artalk_data --region hkg --size 1
 

编辑FLY.TOML#

#根据自动生成的FLY.TOML文件修改
 app = "atim"  
@@ -24,4 +24,4 @@
 

在 fly.toml 文件目录执行#

flyctl ssh console
 

创建一个管理员账号

./artalk admin
 

如需重启则执行

flyctl apps restart
-
在fly.io部署artalk评论系统
https://blog.ittst.com/posts/deploy-the-artalk-review-system-in-fly.io/
作者
浪子
发布于
2023-08-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
在fly.io部署artalk评论系统
https://blog.ittst.com/posts/deploy-the-artalk-review-system-in-fly.io/
作者
浪子
发布于
2023-08-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/docker-deploy-activity-relay-service/index.html b/posts/docker-deploy-activity-relay-service/index.html index e9ecf75..857e7df 100644 --- a/posts/docker-deploy-activity-relay-service/index.html +++ b/posts/docker-deploy-activity-relay-service/index.html @@ -1,4 +1,4 @@ -Docker部署Activity-Relay服务 - 平淡生活
250 字
1 分钟
Docker部署Activity-Relay服务
2023-10-03
  • 经过测试国内部署会有无法通讯的问题.

测试环境#

centos7.9

准备工作#

  • git
  • openssl
  • nginx
  • docker
  • docker-compose

从仓库Pull a repository#

git clone https://github.com/yukimochi/Activity-Relay.git -b v2.0.0
+Docker部署Activity-Relay服务 - 平淡生活
250 字
1 分钟
Docker部署Activity-Relay服务
2023-10-03
  • 经过测试国内部署会有无法通讯的问题.

测试环境#

centos7.9

准备工作#

  • git
  • openssl
  • nginx
  • docker
  • docker-compose

从仓库Pull a repository#

git clone https://github.com/yukimochi/Activity-Relay.git -b v2.0.0
 

复制编辑config.yml#

进入Activity-Relay目录

cd Activity-Relay
 cp config.yml.example config.yml
 

修改相关配置

vim config.yml
@@ -76,4 +76,4 @@
 
   }
 
-
Docker部署Activity-Relay服务
https://blog.ittst.com/posts/docker-deploy-activity-relay-service/
作者
浪子
发布于
2023-10-03
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
Docker部署Activity-Relay服务
https://blog.ittst.com/posts/docker-deploy-activity-relay-service/
作者
浪子
发布于
2023-10-03
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/from-hexo-to-astro/index.html b/posts/from-hexo-to-astro/index.html index 21bd0dc..c06f099 100644 --- a/posts/from-hexo-to-astro/index.html +++ b/posts/from-hexo-to-astro/index.html @@ -1,5 +1,5 @@ -从Hexo到Astro - 平淡生活
413 字
2 分钟
从Hexo到Astro

很多人在向Astro转移,咱也跟风一波. 主要是很喜欢fuwari的这个主题模板,曾经也移植到了Typecho平台.

步骤#

安装Astro#

  1. 从这个模板生成一个新的存储库或分叉这个存储库。 https://github.com/saicaca/fuwari/generate

  2. 要在本地编辑你的博客,克隆你的存储库,运行

pnpm install
+从Hexo到Astro - 平淡生活
413 字
2 分钟
从Hexo到Astro

很多人在向Astro转移,咱也跟风一波. 主要是很喜欢fuwari的这个主题模板,曾经也移植到了Typecho平台.

步骤#

安装Astro#

  1. 从这个模板生成一个新的存储库或分叉这个存储库。 https://github.com/saicaca/fuwari/generate

  2. 要在本地编辑你的博客,克隆你的存储库,运行

pnpm install
 
pnpm add sharp
 

安装依赖项。如果你没有安装pnpm 则执行

npm install-g pnpm
 
  1. 编辑配置文件src/config.ts以自定义你的博客。

  2. 创建一个新帖子 运行

pnpm new-post <filename>
-

并在src/content/post/中进行编辑。

  1. 按照指南将你的博客部署到VercelNetlifyGitHub Pages等。

部署前需要在astro.config.mjs中编辑站点配置。

迁移#

由于HEXOAstroFront-matter存在差异会导致无法正常生成页面 所以就利用deepseek写了个python的脚本用以实现以下功能

  1. 自动生成slug 利用谷歌翻译
  2. 自动更改文件名为文章名. 这个是历史遗留问题.从wordpress转过来时留下的.
  3. 自动更改datepublished.由于hexo的使用过程中有很多种譬如时间戳 譬如 YYYY-MM-DD这一种在HEXO下本来兼容的现在到了Astro下就都报错了.如果出现无法转换则使用默认日期.避免转换过程中出现中断.
  4. 更改categorytags

https://gist.github.com/jkjoy/459deed2048a432f8147abde2a334082

脚本 122 行posts_dir = '_posts'为hexo文章路径.

把转换好的文章 复制进 src/content/post/ 下.

上传#

可以上传到VercelNetlifyGitHub Pages 这些都不赘述了.

玩过Hexo基本都知道怎么操作了

总结#

AstroFront-matter太骚了.

几乎每个模板的定义还不一样.

从Hexo到Astro
https://blog.ittst.com/posts/from-hexo-to-astro/
作者
浪子
发布于
2024-10-28
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

并在src/content/post/中进行编辑。

  1. 按照指南将你的博客部署到VercelNetlifyGitHub Pages等。

部署前需要在astro.config.mjs中编辑站点配置。

迁移#

由于HEXOAstroFront-matter存在差异会导致无法正常生成页面 所以就利用deepseek写了个python的脚本用以实现以下功能

  1. 自动生成slug 利用谷歌翻译
  2. 自动更改文件名为文章名. 这个是历史遗留问题.从wordpress转过来时留下的.
  3. 自动更改datepublished.由于hexo的使用过程中有很多种譬如时间戳 譬如 YYYY-MM-DD这一种在HEXO下本来兼容的现在到了Astro下就都报错了.如果出现无法转换则使用默认日期.避免转换过程中出现中断.
  4. 更改categorytags

https://gist.github.com/jkjoy/459deed2048a432f8147abde2a334082

脚本 122 行posts_dir = '_posts'为hexo文章路径.

把转换好的文章 复制进 src/content/post/ 下.

上传#

可以上传到VercelNetlifyGitHub Pages 这些都不赘述了.

玩过Hexo基本都知道怎么操作了

总结#

AstroFront-matter太骚了.

几乎每个模板的定义还不一样.

从Hexo到Astro
https://blog.ittst.com/posts/from-hexo-to-astro/
作者
浪子
发布于
2024-10-28
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/how-to-deploy-memos-in-fly.io/index.html b/posts/how-to-deploy-memos-in-fly.io/index.html index 4da8876..38b92ad 100644 --- a/posts/how-to-deploy-memos-in-fly.io/index.html +++ b/posts/how-to-deploy-memos-in-fly.io/index.html @@ -1,4 +1,4 @@ -如何在Fly.io部署Memos - 平淡生活
263 字
1 分钟
如何在Fly.io部署Memos
2023-08-15

项目#

https://github.com/hu3rror/memos-on-fly

准备工作#

安装flyctl#

Install flyctl 以WINDOWS为例

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
+如何在Fly.io部署Memos - 平淡生活
263 字
1 分钟
如何在Fly.io部署Memos
2023-08-15

项目#

https://github.com/hu3rror/memos-on-fly

准备工作#

安装flyctl#

Install flyctl 以WINDOWS为例

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
 

其他系统请参照官方

新建APP#

初始化

flyctl launch
 

按照提示选择会生成一个FLY.TOML文件

编辑FLY.TOML#

添加以下

[build]
   image = "ghcr.io/hu3rror/memos-litestream:latest"
@@ -23,4 +23,4 @@
 

添加持久卷#

flyctl volumes create memos_data --region hkg --size 1
 

密钥#

将B2存储的密钥添加到fly的密钥存储中,使用官方镜像可以忽略此步骤

flyctl secrets set LITESTREAM_ACCESS_KEY_ID="<keyId>" LITESTREAM_SECRET_ACCESS_KEY="<applicationKey>"
 

部署#

flyctl deploy
-

演示地址#

https://memosim.fly.dev/ 绑定域名演示 https://imad.top

如何在Fly.io部署Memos
https://blog.ittst.com/posts/how-to-deploy-memos-in-fly.io/
作者
浪子
发布于
2023-08-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

演示地址#

https://memosim.fly.dev/ 绑定域名演示 https://imad.top

如何在Fly.io部署Memos
https://blog.ittst.com/posts/how-to-deploy-memos-in-fly.io/
作者
浪子
发布于
2023-08-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html b/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html index 4be9349..dd7e91e 100644 --- a/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html +++ b/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html @@ -1,3 +1,3 @@ -LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法 - 平淡生活
30 字
1 分钟
LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法

用SSH登录软路由

ssh root@192.168.1.1
+LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法 - 平淡生活
30 字
1 分钟
LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法

用SSH登录软路由

ssh root@192.168.1.1
 

然后输入

sed -i 's/\tdetect_package/\t# detect_package/g' /koolshare/scripts/ks_tar_install.sh
-

再安装科学上网插件即可

koolss

LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
https://blog.ittst.com/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

再安装科学上网插件即可

koolss

LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
https://blog.ittst.com/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/
作者
浪子
发布于
2024-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/local-installation-package-command-under-linux/index.html b/posts/local-installation-package-command-under-linux/index.html index 25f9ad9..80bfca0 100644 --- a/posts/local-installation-package-command-under-linux/index.html +++ b/posts/local-installation-package-command-under-linux/index.html @@ -1,3 +1,3 @@ -Linux下本地安装包命令 - 平淡生活
28 字
1 分钟
Linux下本地安装包命令
2022-07-27

centos下安装RPM安装包#

sudo yum localinstall file.rpm
+Linux下本地安装包命令 - 平淡生活
\ No newline at end of file +
Linux下本地安装包命令
https://blog.ittst.com/posts/local-installation-package-command-under-linux/
作者
浪子
发布于
2022-07-27
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html b/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html index c9a37bf..f52841b 100644 --- a/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html +++ b/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html @@ -1,2 +1,2 @@ -macOS与Windows双系统时间不同步的解决办法 - 平淡生活
\ No newline at end of file +macOS与Windows双系统时间不同步的解决办法 - 平淡生活
35 字
1 分钟
macOS与Windows双系统时间不同步的解决办法
2022-11-15

在windows下 右键点击开始菜单,选择终端(管理员)

 Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
+

回车搞定!重启试试!

macOS与Windows双系统时间不同步的解决办法
https://blog.ittst.com/posts/macos-and-windows-dual-systems-are-not-synchronized/
作者
浪子
发布于
2022-11-15
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/mariadb-creates-databases,-users-and-authorization/index.html b/posts/mariadb-creates-databases,-users-and-authorization/index.html index b044d6d..fe40662 100644 --- a/posts/mariadb-creates-databases,-users-and-authorization/index.html +++ b/posts/mariadb-creates-databases,-users-and-authorization/index.html @@ -1,4 +1,4 @@ -Mariadb创建数据库、用户及授权 - 平淡生活
245 字
1 分钟
Mariadb创建数据库、用户及授权
2023-10-06

在测试SForum程序中使用到的部分关于数据库的操作

安装Mariadb服务器#

apt install mariadb-server-10.6
+Mariadb创建数据库、用户及授权 - 平淡生活
245 字
1 分钟
Mariadb创建数据库、用户及授权
2023-10-06

在测试SForum程序中使用到的部分关于数据库的操作

安装Mariadb服务器#

apt install mariadb-server-10.6
 

初始化数据库#

 mysql_secure_installation
 

连接数据库#

mysql -u root -p 
 

创建数据库#

CREATE DATABASE bbs;
@@ -9,4 +9,4 @@
 FLUSH privileges;
 

或则采用下面的代码,除了操作权限授权外,还赋予授权的权限。#

GRANT ALL ON test.* to username@'%' IDENTIFIED BY 'passowrd' WITH GRANT OPTION;
 FLUSH privileges;
-
Mariadb创建数据库、用户及授权
https://blog.ittst.com/posts/mariadb-creates-databases,-users-and-authorization/
作者
浪子
发布于
2023-10-06
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
Mariadb创建数据库、用户及授权
https://blog.ittst.com/posts/mariadb-creates-databases,-users-and-authorization/
作者
浪子
发布于
2023-10-06
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/nec-m700-black-apple-oc0.9.4-guide/index.html b/posts/nec-m700-black-apple-oc0.9.4-guide/index.html index 7431f17..8a6855e 100644 --- a/posts/nec-m700-black-apple-oc0.9.4-guide/index.html +++ b/posts/nec-m700-black-apple-oc0.9.4-guide/index.html @@ -1 +1 @@ -NEC M700黑苹果OC0.9.4引导 - 平淡生活
106 字
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01

NEC M700黑苹果OC0.9.4引导#

配置#

CPU QHPW 2.2Ghz 四核心八线程I7es魔改 主板NEC 内存8GB DDR4 2666Mhz 硬盘512GB SSD 无线网卡BCM943224pcieBT拆机 有线网卡INTEL 声卡ALC235

准备工作#

U盘 16G以上 解锁CFG LOCK工具 ami BIOS提取工具 opencore OCAT

解锁CFG LOCK#

在WINDOWS系统下通过工具提取出BIOS. 通过UEFI TOOL打开提取出的BIOS文件,查找cfg lock

NEC M700黑苹果OC0.9.4引导
https://blog.ittst.com/posts/nec-m700-black-apple-oc0.9.4-guide/
作者
浪子
发布于
2023-10-01
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +NEC M700黑苹果OC0.9.4引导 - 平淡生活
106 字
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01

NEC M700黑苹果OC0.9.4引导#

配置#

CPU QHPW 2.2Ghz 四核心八线程I7es魔改 主板NEC 内存8GB DDR4 2666Mhz 硬盘512GB SSD 无线网卡BCM943224pcieBT拆机 有线网卡INTEL 声卡ALC235

准备工作#

U盘 16G以上 解锁CFG LOCK工具 ami BIOS提取工具 opencore OCAT

解锁CFG LOCK#

在WINDOWS系统下通过工具提取出BIOS. 通过UEFI TOOL打开提取出的BIOS文件,查找cfg lock

NEC M700黑苹果OC0.9.4引导
https://blog.ittst.com/posts/nec-m700-black-apple-oc0.9.4-guide/
作者
浪子
发布于
2023-10-01
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/nec-vk22-black-apple-opencore-guide/index.html b/posts/nec-vk22-black-apple-opencore-guide/index.html index 830fb4d..2fc854f 100644 --- a/posts/nec-vk22-black-apple-opencore-guide/index.html +++ b/posts/nec-vk22-black-apple-opencore-guide/index.html @@ -1 +1 @@ -NEC VK22 黑苹果opencore引导 - 平淡生活
192 字
1 分钟
NEC VK22 黑苹果opencore引导

关于解锁#

安装之前要解锁cfglock

关于nvme固态的使用#

思路就是用一个U盘格式化成FAT32格式

把oc引导复制在U盘中。

在BIOS中把U盘启动设为第一启动项

这样做得好处是不用修改BIOS直接使用nvme的固态提升读写速度

坏处就是占用一个USB口

其他#

笔记本黑苹果的难点就在于注入edid。

我的做法是在clover下安装好macos之后再用hackintool注入EDID,然后再转为opencore引导。

其他都很简单我就不多说了。

附上EFI文件,三码自己改

已驱动#

显卡 声卡 网卡 (已更换DW1820A) 读卡器 USB 触摸板

下载#

请打赏后下载

NEC VK22 黑苹果opencore引导
https://blog.ittst.com/posts/nec-vk22-black-apple-opencore-guide/
作者
浪子
发布于
2021-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +NEC VK22 黑苹果opencore引导 - 平淡生活
192 字
1 分钟
NEC VK22 黑苹果opencore引导

关于解锁#

安装之前要解锁cfglock

关于nvme固态的使用#

思路就是用一个U盘格式化成FAT32格式

把oc引导复制在U盘中。

在BIOS中把U盘启动设为第一启动项

这样做得好处是不用修改BIOS直接使用nvme的固态提升读写速度

坏处就是占用一个USB口

其他#

笔记本黑苹果的难点就在于注入edid。

我的做法是在clover下安装好macos之后再用hackintool注入EDID,然后再转为opencore引导。

其他都很简单我就不多说了。

附上EFI文件,三码自己改

已驱动#

显卡 声卡 网卡 (已更换DW1820A) 读卡器 USB 触摸板

下载#

请打赏后下载

NEC VK22 黑苹果opencore引导
https://blog.ittst.com/posts/nec-vk22-black-apple-opencore-guide/
作者
浪子
发布于
2021-10-10
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/office2016-mac-version-download,-install,-crack-activation/index.html b/posts/office2016-mac-version-download,-install,-crack-activation/index.html index 3e45080..40c0014 100644 --- a/posts/office2016-mac-version-download,-install,-crack-activation/index.html +++ b/posts/office2016-mac-version-download,-install,-crack-activation/index.html @@ -1 +1 @@ -office2016 Mac 版本下载安装及破解激活 - 平淡生活
\ No newline at end of file +office2016 Mac 版本下载安装及破解激活 - 平淡生活
22 字
1 分钟
office2016 Mac 版本下载安装及破解激活
2022-10-14
office2016 Mac 版本下载安装及破解激活
https://blog.ittst.com/posts/office2016-mac-version-download,-install,-crack-activation/
作者
浪子
发布于
2022-10-14
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/quickly-deploy-misskey-instance/index.html b/posts/quickly-deploy-misskey-instance/index.html index fcca8e9..e3abf04 100644 --- a/posts/quickly-deploy-misskey-instance/index.html +++ b/posts/quickly-deploy-misskey-instance/index.html @@ -1,4 +1,4 @@ -快速部署misskey实例 - 平淡生活
308 字
2 分钟
快速部署misskey实例
2023-10-11

使用官方推荐一键脚本#

使用纯净的Ubuntu系统安装,推荐配置双核心四线程.

更新软件#

sudo apt update; sudo apt full-upgrade -y; sudo reboot
+快速部署misskey实例 - 平淡生活
308 字
2 分钟
快速部署misskey实例
2023-10-11

使用官方推荐一键脚本#

使用纯净的Ubuntu系统安装,推荐配置双核心四线程.

更新软件#

sudo apt update; sudo apt full-upgrade -y; sudo reboot
 

一键脚本#

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh
 

按照提示输入内容

更新misskey脚本#

更新 Misskey 的脚本不会升级运行环境。 对于脚本的更新内容,另请参阅 “更新日志”

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/update.ubuntu.sh -O update.sh
 
sudo bash update.sh
@@ -44,4 +44,4 @@
         add_header X-Cache $upstream_cache_status;
     }
 }
-
快速部署misskey实例
https://blog.ittst.com/posts/quickly-deploy-misskey-instance/
作者
浪子
发布于
2023-10-11
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
快速部署misskey实例
https://blog.ittst.com/posts/quickly-deploy-misskey-instance/
作者
浪子
发布于
2023-10-11
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/qv2ray-client-and-kernel-download/index.html b/posts/qv2ray-client-and-kernel-download/index.html index 7e591b5..693faa5 100644 --- a/posts/qv2ray-client-and-kernel-download/index.html +++ b/posts/qv2ray-client-and-kernel-download/index.html @@ -1 +1 @@ -Qv2ray客户端及内核下载 - 平淡生活
154 字
1 分钟
Qv2ray客户端及内核下载
2023-04-07

关于Qv2ray#

在我们常用的PC系统上,比如Windows/Mac/Linux等系统平台,V2ray官方并没有发布图形化的桌面客户端。

V2rayN和Qv2ray等一些第三方工具,在V2ray官方内核的基础上,为我们提供了图形化界面支持,使用起来会更加方便。

其中Qv2ray除了支持V2ray的vmess协议外,还可以通过安装插件的方式,额外增加对SS/SSR/Trojan等代理协议的支持,可作为V2ray/SS/SSR/Trojan客户端使用。

支持的协议#

Vmess(V2ray) SS(Shadowsocks) SSR(ShadowsocksR) Trojan Trojan-go NaiveProxy Vless

下载#

客户端下载#

https://github.com/Qv2ray/Qv2ray/releases

内核下载#

https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0

Qv2ray客户端及内核下载
https://blog.ittst.com/posts/qv2ray-client-and-kernel-download/
作者
浪子
发布于
2023-04-07
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +Qv2ray客户端及内核下载 - 平淡生活
154 字
1 分钟
Qv2ray客户端及内核下载
2023-04-07

关于Qv2ray#

在我们常用的PC系统上,比如Windows/Mac/Linux等系统平台,V2ray官方并没有发布图形化的桌面客户端。

V2rayN和Qv2ray等一些第三方工具,在V2ray官方内核的基础上,为我们提供了图形化界面支持,使用起来会更加方便。

其中Qv2ray除了支持V2ray的vmess协议外,还可以通过安装插件的方式,额外增加对SS/SSR/Trojan等代理协议的支持,可作为V2ray/SS/SSR/Trojan客户端使用。

支持的协议#

Vmess(V2ray) SS(Shadowsocks) SSR(ShadowsocksR) Trojan Trojan-go NaiveProxy Vless

下载#

客户端下载#

https://github.com/Qv2ray/Qv2ray/releases

内核下载#

https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0

Qv2ray客户端及内核下载
https://blog.ittst.com/posts/qv2ray-client-and-kernel-download/
作者
浪子
发布于
2023-04-07
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html b/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html index a0911d3..db945bb 100644 --- a/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html +++ b/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html @@ -1 +1 @@ -记一次亿储SSD固态掉盘修复(重新开卡) - 平淡生活
378 字
2 分钟
记一次亿储SSD固态掉盘修复(重新开卡)

老孙在闲鱼淘了一块二手的SSD,本来准备用来安装黑苹果使用。 刚开始安装挺顺利,安装的是OSX 12.13.6,分区格式APFS。 笔记本没有息屏就上班去了。 下班回来一看界面卡死。于是只有强行关机重启。 这下问题来了,识别不了硬盘了。 百度出的原因就是固态硬盘掉盘。是二三线固态厂商的通病。再次建议大家还是买大厂的产品。 有教程说30分钟拯救固态。试了一晚上不行。 看了第二种方法就是去开卡量产。 摸索了一晚上终于成功了!!!

所需物料#


硬盘盒(USB转接卡) 螺丝刀(拆硬盘用) 开卡软件(文章末尾下载) 1 首先把硬盘拆开 拆开硬盘发现主控是慧荣sm 2246XT(其实百度也可以百度到,如果是正品的话……) 103_2877224_9e544a870ce08b2.jpg 图是网上找的,主控型号一般会印在主控芯片上,也就是那个小的。 2 短接JP1,PCB上一般会有标注,如果和我的硬盘一样的话就短接最上面两个(懒 没有作图 网图) 3 接上硬盘盒 打开开卡软件sm2246XT_MPTool_O1224H 4 识别到port1之后 不用短接 QQ浏览器截图20190801131230.png 5 此时应该在Parameter里面选择一个合适的flash型号,直接开卡就会成功 103_2877224_bd107f5920c8e54.png

参考教程链接

http://www.upantool.com/jiaocheng/ssd/2017/10569.html http://bbs.mydigit.cn/read.php?tid=2367269

开卡工具下载#

sm2246XT_MPTool_O1224H.zip

bg.jpg

记一次亿储SSD固态掉盘修复(重新开卡)
https://blog.ittst.com/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/
作者
浪子
发布于
2019-08-01
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +记一次亿储SSD固态掉盘修复(重新开卡) - 平淡生活
378 字
2 分钟
记一次亿储SSD固态掉盘修复(重新开卡)

老孙在闲鱼淘了一块二手的SSD,本来准备用来安装黑苹果使用。 刚开始安装挺顺利,安装的是OSX 12.13.6,分区格式APFS。 笔记本没有息屏就上班去了。 下班回来一看界面卡死。于是只有强行关机重启。 这下问题来了,识别不了硬盘了。 百度出的原因就是固态硬盘掉盘。是二三线固态厂商的通病。再次建议大家还是买大厂的产品。 有教程说30分钟拯救固态。试了一晚上不行。 看了第二种方法就是去开卡量产。 摸索了一晚上终于成功了!!!

所需物料#


硬盘盒(USB转接卡) 螺丝刀(拆硬盘用) 开卡软件(文章末尾下载) 1 首先把硬盘拆开 拆开硬盘发现主控是慧荣sm 2246XT(其实百度也可以百度到,如果是正品的话……) 103_2877224_9e544a870ce08b2.jpg 图是网上找的,主控型号一般会印在主控芯片上,也就是那个小的。 2 短接JP1,PCB上一般会有标注,如果和我的硬盘一样的话就短接最上面两个(懒 没有作图 网图) 3 接上硬盘盒 打开开卡软件sm2246XT_MPTool_O1224H 4 识别到port1之后 不用短接 QQ浏览器截图20190801131230.png 5 此时应该在Parameter里面选择一个合适的flash型号,直接开卡就会成功 103_2877224_bd107f5920c8e54.png

参考教程链接

http://www.upantool.com/jiaocheng/ssd/2017/10569.html http://bbs.mydigit.cn/read.php?tid=2367269

开卡工具下载#

sm2246XT_MPTool_O1224H.zip

bg.jpg

记一次亿储SSD固态掉盘修复(重新开卡)
https://blog.ittst.com/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/
作者
浪子
发布于
2019-08-01
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/start-with-memos's-webhook/index.html b/posts/start-with-memos's-webhook/index.html index 0c05786..84c3527 100644 --- a/posts/start-with-memos's-webhook/index.html +++ b/posts/start-with-memos's-webhook/index.html @@ -1,4 +1,4 @@ -从memos的webhook开始 - 平淡生活
779 字
4 分钟
从memos的webhook开始
2024-06-18

说在前面#

memos的webhook功能从v0.18 版本开始加入. webhook也为memos带来了不一样的玩法.

前段时间从Typecho主题icefox上直接CTRL+C了CSS布局,做了一个基于memos的单页面,类微信朋友圈.

然后使用webhook自动保存json到本地目录,快速加载. 解决跨域问题

获取memos.json#

使用bash#

创建一个memos.sh文件

#!/bin/bash
+从memos的webhook开始 - 平淡生活
779 字
4 分钟
从memos的webhook开始
2024-06-18

说在前面#

memos的webhook功能从v0.18 版本开始加入. webhook也为memos带来了不一样的玩法.

前段时间从Typecho主题icefox上直接CTRL+C了CSS布局,做了一个基于memos的单页面,类微信朋友圈.

然后使用webhook自动保存json到本地目录,快速加载. 解决跨域问题

获取memos.json#

使用bash#

创建一个memos.sh文件

#!/bin/bash
 
 # API地址
 API_URL="https://memos.ee/api/v1/memos"
@@ -74,4 +74,4 @@
   command-working-directory: "/"
 

然后运行

docker compose up -d
 

即可

使用Webhook#

hooks.yaml为webhook的配置文件

其中的execute-command为容器中的可执行脚本目录 webhook的访问地址格式为 服务器 ip:端口/hooks/id 访问http://127.0.0.1:9000/hooks/memos 即可触发执行bash /config/memos.sh

在memos的webhook设置中填入http://127.0.0.1:9000/hooks/memos的webhook地址, 即可

以宝塔为例#

创建一个名为 api.domain.com的网站 在网站的根目录下创建 docker-compose.yaml hooks.yaml memos.sh 的文件 运行

docker compose up -d
-

创建一个反向代理 使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录 访问api.domain.com/webhook/hooks/memos 此时会在网站根目录下生成memos.json 访问api.domain.com/memos.json 此时在memos的webhook地址中填入api.domain.com/webhook/hooks/memos 实现在memos更新时自动更新memos.json文件

演示#

https://memos.jkjoy.cn

从memos的webhook开始
https://blog.ittst.com/posts/start-with-memos's-webhook/
作者
浪子
发布于
2024-06-18
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

创建一个反向代理 使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录 访问api.domain.com/webhook/hooks/memos 此时会在网站根目录下生成memos.json 访问api.domain.com/memos.json 此时在memos的webhook地址中填入api.domain.com/webhook/hooks/memos 实现在memos更新时自动更新memos.json文件

演示#

https://memos.jkjoy.cn

从memos的webhook开始
https://blog.ittst.com/posts/start-with-memos's-webhook/
作者
浪子
发布于
2024-06-18
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/test-various-problems-encountered-in-xiuno2sforum/index.html b/posts/test-various-problems-encountered-in-xiuno2sforum/index.html index 3cd125e..b096391 100644 --- a/posts/test-various-problems-encountered-in-xiuno2sforum/index.html +++ b/posts/test-various-problems-encountered-in-xiuno2sforum/index.html @@ -1,4 +1,4 @@ -测试xiuno2Sforum中遇到的各种问题 - 平淡生活
392 字
2 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06

想把xiunobbs数据转换成SForum,由于最新版本的SForum没有转换工具支持 于是采用Sforum v2.2.2测试

测试环境#

  • Ubuntu 22.0.4
  • php8.0
  • mariadb10.6
  • composer
  • redis
  • nginx or apache

测试程序#

sforum v2.2.2

xiuno2sforum v2.2.2

PHP#

安装PPA 源#

需要使用 PPA 源安装:

sudo apt install software-properties-common -y
+测试xiuno2Sforum中遇到的各种问题 - 平淡生活
392 字
2 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06

想把xiunobbs数据转换成SForum,由于最新版本的SForum没有转换工具支持 于是采用Sforum v2.2.2测试

测试环境#

  • Ubuntu 22.0.4
  • php8.0
  • mariadb10.6
  • composer
  • redis
  • nginx or apache

测试程序#

sforum v2.2.2

xiuno2sforum v2.2.2

PHP#

安装PPA 源#

需要使用 PPA 源安装:

sudo apt install software-properties-common -y
 sudo add-apt-repository ppa:ondrej/php
 sudo apt-get update
 

安装php8.0#

apt install php8.0
@@ -40,4 +40,4 @@
 

安装SForum v2.2.2#

composer create-project zhuchunshu/sforum=v2.2.2 sforum
 

进入安装目录,

cd sforum
 

按照提示,连续执行命令即可完成安装(启动服务也是此命令):

php CodeFec CodeFec
-
测试xiuno2Sforum中遇到的各种问题
https://blog.ittst.com/posts/test-various-problems-encountered-in-xiuno2sforum/
作者
浪子
发布于
2023-10-06
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +
测试xiuno2Sforum中遇到的各种问题
https://blog.ittst.com/posts/test-various-problems-encountered-in-xiuno2sforum/
作者
浪子
发布于
2023-10-06
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html b/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html index e2c9f78..efc4493 100644 --- a/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html +++ b/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html @@ -1,3 +1,3 @@ -centos7 ssh连接慢的解决方法 - 平淡生活
35 字
1 分钟
centos7 ssh连接慢的解决方法
2022-08-12
vim /etc/ssh/sshd_config
+centos7 ssh连接慢的解决方法 - 平淡生活
\ No newline at end of file +

重启

centos7 ssh连接慢的解决方法
https://blog.ittst.com/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/
作者
浪子
发布于
2022-08-12
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/there-is-no-network-after-installs7-installation/index.html b/posts/there-is-no-network-after-installs7-installation/index.html index 4c56a81..2edcdb8 100644 --- a/posts/there-is-no-network-after-installs7-installation/index.html +++ b/posts/there-is-no-network-after-installs7-installation/index.html @@ -1,2 +1,2 @@ -centos7安装后没有网络 - 平淡生活
\ No newline at end of file +centos7安装后没有网络 - 平淡生活
51 字
1 分钟
centos7安装后没有网络
2022-11-29

root账号登陆 用ip addr命令查看网络参数。 打开eth0网卡的配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0
+

NOBOOT参数no,修改为yes 重启网络或者重启服务器都可

centos7安装后没有网络
https://blog.ittst.com/posts/there-is-no-network-after-installs7-installation/
作者
浪子
发布于
2022-11-29
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/typecho-plug--in-commentsbyqq-modified-version/index.html b/posts/typecho-plug--in-commentsbyqq-modified-version/index.html index 903cc97..0a3f8df 100644 --- a/posts/typecho-plug--in-commentsbyqq-modified-version/index.html +++ b/posts/typecho-plug--in-commentsbyqq-modified-version/index.html @@ -1 +1 @@ -Typecho插件CommentsByQQ修改版 - 平淡生活
113 字
1 分钟
Typecho插件CommentsByQQ修改版

简介#

基于Typecho插件CommentsByQQ修改 一直想让qq来通知评论消息。毕竟邮箱之类的还是不太方便。 原作者的插件QQ机器人已经挂了。所以我自己搭建了一个基于go-http的QQ机器人 由于本人也是菜鸟,没有后续

使用#

添加qq机器人153985848为好友 在后台设置中填写接收消息的qq号即可

下载地址#

CommentsByQQ.zip

Typecho插件CommentsByQQ修改版
https://blog.ittst.com/posts/typecho-plug--in-commentsbyqq-modified-version/
作者
浪子
发布于
2022-09-19
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +Typecho插件CommentsByQQ修改版 - 平淡生活
113 字
1 分钟
Typecho插件CommentsByQQ修改版

简介#

基于Typecho插件CommentsByQQ修改 一直想让qq来通知评论消息。毕竟邮箱之类的还是不太方便。 原作者的插件QQ机器人已经挂了。所以我自己搭建了一个基于go-http的QQ机器人 由于本人也是菜鸟,没有后续

使用#

添加qq机器人153985848为好友 在后台设置中填写接收消息的qq号即可

下载地址#

CommentsByQQ.zip

Typecho插件CommentsByQQ修改版
https://blog.ittst.com/posts/typecho-plug--in-commentsbyqq-modified-version/
作者
浪子
发布于
2022-09-19
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/use-docker-to-build-a-pleroma-example/index.html b/posts/use-docker-to-build-a-pleroma-example/index.html index ae26e83..8980987 100644 --- a/posts/use-docker-to-build-a-pleroma-example/index.html +++ b/posts/use-docker-to-build-a-pleroma-example/index.html @@ -1,4 +1,4 @@ -使用 Docker 构建 Pleroma 实例 - 平淡生活
459 字
2 分钟
使用 Docker 构建 Pleroma 实例

Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。 而 ActivityPub 包括 Mastodon(Pawoo 等)、Misskey(misskey.io 等)、Pleroma 等等。 在这些开源产品中,Pleroma 实机上部署环境步骤复杂繁琐。 但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢? 现在 docker 的出现大大简化了部署的方式,只需要简单三步即可轻松搭建实例。

本文将介绍如何使用 docker 构建 Pleroma 实例。 以宝塔面板为例

先安装docker#

在应用商店中查找docker并安装

获取 docker-compose.yml 模板#

git clone https://git.pleroma.social/pleroma/pleroma-docker-compose.git
+使用 Docker 构建 Pleroma 实例 - 平淡生活
459 字
2 分钟
使用 Docker 构建 Pleroma 实例

Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。 而 ActivityPub 包括 Mastodon(Pawoo 等)、Misskey(misskey.io 等)、Pleroma 等等。 在这些开源产品中,Pleroma 实机上部署环境步骤复杂繁琐。 但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢? 现在 docker 的出现大大简化了部署的方式,只需要简单三步即可轻松搭建实例。

本文将介绍如何使用 docker 构建 Pleroma 实例。 以宝塔面板为例

先安装docker#

在应用商店中查找docker并安装

获取 docker-compose.yml 模板#

git clone https://git.pleroma.social/pleroma/pleroma-docker-compose.git
 cd pleroma-docker-compose 
 

接下来所有操作(除 nginx 配置)如果没有加以说明都在这个目录下进行。

需要修改的内容#

打开./enviroments/pleroma/pleroma.env,修改其中的配置:

DB_USER=pleroma # 数据库用户名
 DB_PASS=pleroma # 数据库密码
@@ -27,4 +27,4 @@
     # proxy_hide_header Upgrade;
 }
 

创建管理员账户#

docker exec -it pleroma ./opt/pleroma/bin/pleroma_ctl user new admin 邮箱 --admin
-

运行后会出现一个链接,复制在浏览器即可重置密码.

修改文件夹权限#

/root/pleroma-docker-compose/volumes/pleroma下的uploads权限设置为777 当然如果你用S3协议的对象存储则不需要修改 直接在后台设置S3即可.

演示地址#

https://chaihu.top

使用 Docker 构建 Pleroma 实例
https://blog.ittst.com/posts/use-docker-to-build-a-pleroma-example/
作者
浪子
发布于
2023-07-24
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

运行后会出现一个链接,复制在浏览器即可重置密码.

修改文件夹权限#

/root/pleroma-docker-compose/volumes/pleroma下的uploads权限设置为777 当然如果你用S3协议的对象存储则不需要修改 直接在后台设置S3即可.

演示地址#

https://chaihu.top

使用 Docker 构建 Pleroma 实例
https://blog.ittst.com/posts/use-docker-to-build-a-pleroma-example/
作者
浪子
发布于
2023-07-24
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html b/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html index d451865..fcdf4fe 100644 --- a/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html +++ b/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html @@ -1,4 +1,4 @@ -使用Docker快速部署一个memos的QQ机器人 - 平淡生活
500 字
3 分钟
使用Docker快速部署一个memos的QQ机器人

前言:本文介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。

准备工作#

  1. 安装Docker
  2. 一个QQ账号
  3. 一个Memos账号

部署#

memos机器人#

此处使用Nonebot2作为框架,自己撸的Nonebot2的插件nonebot_plugin_memos对接Memos机器人。

我打包编译的镜像jkjoy/qq2memos:latest

如需源码参考 https://www.imsun.org/archives/1668.html

首先创建一个docker-compose.yml文件,内容如下:

services:
+使用Docker快速部署一个memos的QQ机器人 - 平淡生活
500 字
3 分钟
使用Docker快速部署一个memos的QQ机器人

前言:本文介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。

准备工作#

  1. 安装Docker
  2. 一个QQ账号
  3. 一个Memos账号

部署#

memos机器人#

此处使用Nonebot2作为框架,自己撸的Nonebot2的插件nonebot_plugin_memos对接Memos机器人。

我打包编译的镜像jkjoy/qq2memos:latest

如需源码参考 https://www.imsun.org/archives/1668.html

首先创建一个docker-compose.yml文件,内容如下:

services:
   memos:
     container_name: memos
     environment:
@@ -28,4 +28,4 @@
       - "./config:/app/napcat/config"
     network_mode: host #使用host的原因是为了方便对接宿主机的nonebot框架
 

然后运行docker-compose up -d即可。

访问WEBUI地址 http://ip:6099/webui/login.html

登录所使用的tokendocker-compose.yaml 所在目录下的config中的webui.json

可选择扫码登录

在设置页面中添加反向 WS 地址,地址为

ws://127.0.0.1:8080/onebot/v11/ws
-

这里的 8080 是 NoneBot 输出的端口号,根据情况自行更改

/onebot/v11/ws 是 NoneBot onebot 适配器默认的路径

点击保存,容器日志提示通讯成功即可.

使用机器人#

在聊天对话框输入任何内容会提示绑定

按照提示进行绑定即可

在绑定成功后,在聊天对话框输入任何内容都会转发到Memos 且 默认为公开内容.

暂不支持发送图片等其他内容.

使用Docker快速部署一个memos的QQ机器人
https://blog.ittst.com/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/
作者
浪子
发布于
2024-09-13
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

这里的 8080 是 NoneBot 输出的端口号,根据情况自行更改

/onebot/v11/ws 是 NoneBot onebot 适配器默认的路径

点击保存,容器日志提示通讯成功即可.

使用机器人#

在聊天对话框输入任何内容会提示绑定

按照提示进行绑定即可

在绑定成功后,在聊天对话框输入任何内容都会转发到Memos 且 默认为公开内容.

暂不支持发送图片等其他内容.

使用Docker快速部署一个memos的QQ机器人
https://blog.ittst.com/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/
作者
浪子
发布于
2024-09-13
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html b/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html index 0feb2fd..143bb38 100644 --- a/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html +++ b/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html @@ -1,4 +1,4 @@ -使用Docker快速部署mastodon实例 - 平淡生活
272 字
1 分钟
使用Docker快速部署mastodon实例
2023-10-30

如何使用Docker快速部署mastodon实例#

直接使用docker compose部署是不可行的,需要按照步骤进行

创建目录#

mkdir -p /home/mastodon/mastodon
+使用Docker快速部署mastodon实例 - 平淡生活
272 字
1 分钟
使用Docker快速部署mastodon实例
2023-10-30

如何使用Docker快速部署mastodon实例#

直接使用docker compose部署是不可行的,需要按照步骤进行

创建目录#

mkdir -p /home/mastodon/mastodon
 

进入目录#

cd /home/mastodon/mastodon
 

拉取镜像#

docker pull ghcr.io/mastodon/mastodon
 

修改docker compose配置文件#

wget https://raw.githubusercontent.com/mastodon/mastodon/main/docker-compose.yml
@@ -16,4 +16,4 @@
 docker-compose down
 docker-compose up -d
 

创建管理员

docker exec mastodon-web-1 tootctl accounts create USERNAME --email EMAIL --confirmed --role Owner
-

至此完成

使用Docker快速部署mastodon实例
https://blog.ittst.com/posts/use-docker-to-quickly-deploy-mastodon-instances/
作者
浪子
发布于
2023-10-30
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

至此完成

使用Docker快速部署mastodon实例
https://blog.ittst.com/posts/use-docker-to-quickly-deploy-mastodon-instances/
作者
浪子
发布于
2023-10-30
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html b/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html index 70debb5..043ec32 100644 --- a/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html +++ b/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html @@ -1,4 +1,4 @@ -利用 Github Actions 自动部署 Hexo 博客 - 平淡生活
331 字
2 分钟
利用 Github Actions 自动部署 Hexo 博客

Github Actions 简介#

Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

前提#

1.您已经创建了hexo博客 2.您已经注册了github的账户 3.您已经创建了github项目并上传了hexo源码

创建#

在项目根目录下创建.github/workflows/main.yml

1.点击此处申请 Personal access tokens (classic)

2.在Settings-secrets and variables-Actions下设置HEXOBLOG为上一步得到的Personal access tokens

1.png

3.可以把以下内容粘贴进去

run-name: Deploy 
+利用 Github Actions 自动部署 Hexo 博客 - 平淡生活
331 字
2 分钟
利用 Github Actions 自动部署 Hexo 博客

Github Actions 简介#

Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

前提#

1.您已经创建了hexo博客 2.您已经注册了github的账户 3.您已经创建了github项目并上传了hexo源码

创建#

在项目根目录下创建.github/workflows/main.yml

1.点击此处申请 Personal access tokens (classic)

2.在Settings-secrets and variables-Actions下设置HEXOBLOG为上一步得到的Personal access tokens

1.png

3.可以把以下内容粘贴进去

run-name: Deploy 
  
 on: 
   push:
@@ -54,4 +54,4 @@
         PUBLISH_BRANCH: gh-pages 
         PUBLISH_DIR: ./public 
         commit_message: ${{ github.event.head_commit.message }}
-

实现的功能#

在hexo项目main分支有更新时,会自动更新仓库下分支gh-pages

利用 Github Actions 自动部署 Hexo 博客
https://blog.ittst.com/posts/use-github-actions-to-automatically-deploy-hexo-blog/
作者
浪子
发布于
2024-05-08
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

实现的功能#

在hexo项目main分支有更新时,会自动更新仓库下分支gh-pages

利用 Github Actions 自动部署 Hexo 博客
https://blog.ittst.com/posts/use-github-actions-to-automatically-deploy-hexo-blog/
作者
浪子
发布于
2024-05-08
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html b/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html index cd27bff..93dda6f 100644 --- a/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html +++ b/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html @@ -1,4 +1,4 @@ -用Memos API实现hexo博客的动态说说页面 - 平淡生活
121 字
1 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13

新建一个页面

hexo new page Memos
+用Memos API实现hexo博客的动态说说页面 - 平淡生活
121 字
1 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13

新建一个页面

hexo new page Memos
 

修改Memos/index.md内容为

---
 title: Memos
 comments: false
@@ -21,4 +21,4 @@
   }
 </script>
 <script src="https://blogcdn.loliko.cn/memos/js/memo.js?0.0.2"></script>
-

即可~

代码来源于网络~

用Memos API实现hexo博客的动态说说页面
https://blog.ittst.com/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/
作者
浪子
发布于
2023-06-13
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +

即可~

代码来源于网络~

用Memos API实现hexo博客的动态说说页面
https://blog.ittst.com/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/
作者
浪子
发布于
2023-06-13
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/vi-editor's-basic-usage-method/index.html b/posts/vi-editor's-basic-usage-method/index.html index 64034e7..5a305b3 100644 --- a/posts/vi-editor's-basic-usage-method/index.html +++ b/posts/vi-editor's-basic-usage-method/index.html @@ -1 +1 @@ -Vi编辑器的基本使用方法 - 平淡生活
2295 字
11 分钟
Vi编辑器的基本使用方法
2016-11-16

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。 由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。 Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

1、vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  1. 命令行模式command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

  1. 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

  1. 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

2、vi的基本操作

a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

b) 切换至插入模式(Insert mode)编辑文件 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

c) Insert 的切换 您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

d) 退出vi及保存文件

在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

w filename (输入 「w filename」将文章以指定的文件名filename保存)

wq (输入「wq」,存盘并退出vi)

q! (输入q!, 不存盘强制退出vi)

3、命令行模式(command mode)功能键

1). 插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2). 从插入模式切换为命令行模式 按「ESC」键。

3). 移动光标 vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。 按「ctrl」+「b」:屏幕往“后”移动一页。 按「ctrl」+「f」:屏幕往“前”移动一页。 按「ctrl」+「u」:屏幕往“后”移动半页。 按「ctrl」+「d」:屏幕往“前”移动半页。 按数字「0」:移到文章的开头。 按「G」:移动到文章的最后。 按「$」:移动到光标所在行的“行尾”。 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头 按「e」:光标跳到下个字的字尾 按「b」:光标回到上个字的开头 按「#l」:光标移到该行的第#个位置,如:5l,56l。

4). 删除文字 「x」:每按一次,删除光标所在位置的“后面”一个字符。 「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行

5). 复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

6). 替换 「r」:替换光标所在处的字符。 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

7). 回复上一次操作 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

8). 更改 「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字 9). 跳至指定的行 「ctrl」+「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

4、Last line mode下命令简介 在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

A) 列出行号 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

B) 跳到文件中的某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

C) 查找字符 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

D) 保存文件 「w」:在冒号输入字母「w」就可以将文件保存起来。

E) 离开vi 「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。 「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

5、vi命令列表

1、下表列出命令模式下的一些键的功能: h 左移光标一个字符 l 右移光标一个字符 k 光标上移一行 j 光标下移一行 ^ 光标移动至行首 0 数字“0”,光标移至文章的开头 G 光标移至文章的最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 在光标位置前插入字符 a 在光标所在位置的后一个字符开始增加 o 插入新的一行,从行首开始输入 ESC 从输入状态退至命令状态 x 删除光标后面的字符 #x 删除光标后的#个字符 X (大写X),删除光标前面的字符 #X 删除光标前面的#个字符 dd 删除光标所在的行 #dd 删除从光标所在行数的#行 yw 复制光标所在位置的一个字 #yw 复制光标所在位置的#个字 yy 复制光标所在位置的一行 #yy 复制从光标所在行数的#行 p 粘贴 u 取消操作 cw 更改光标所在位置的一个字 #cw 更改光标所在位置的#个字

2、下表列出行命令模式下的一些指令 w filename 储存正在编辑的文件为filename wq filename 储存正在编辑的文件为filename,并退出vi q! 放弃所有修改,退出vi set nu 显示行号 /或? 查找,在/后输入要查找的内容 n 与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。

对于第一次用vi,有几点注意要提醒一下:

1、用vi打开文件后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。

切换方法:在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

2、编辑好后,需从插入模式切换为命令行模式才能对文件进行保存,切换方法:按「ESC」键。

3、保存并退出文件:在命令模式下输入即可!(别忘了wq前面的:)

Vi编辑器的基本使用方法
https://blog.ittst.com/posts/vi-editor's-basic-usage-method/
作者
浪子
发布于
2016-11-16
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file +Vi编辑器的基本使用方法 - 平淡生活
2295 字
11 分钟
Vi编辑器的基本使用方法
2016-11-16

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。 由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。 Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

1、vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  1. 命令行模式command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

  1. 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

  1. 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

2、vi的基本操作

a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

b) 切换至插入模式(Insert mode)编辑文件 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

c) Insert 的切换 您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

d) 退出vi及保存文件

在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

w filename (输入 「w filename」将文章以指定的文件名filename保存)

wq (输入「wq」,存盘并退出vi)

q! (输入q!, 不存盘强制退出vi)

3、命令行模式(command mode)功能键

1). 插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2). 从插入模式切换为命令行模式 按「ESC」键。

3). 移动光标 vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。 按「ctrl」+「b」:屏幕往“后”移动一页。 按「ctrl」+「f」:屏幕往“前”移动一页。 按「ctrl」+「u」:屏幕往“后”移动半页。 按「ctrl」+「d」:屏幕往“前”移动半页。 按数字「0」:移到文章的开头。 按「G」:移动到文章的最后。 按「$」:移动到光标所在行的“行尾”。 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头 按「e」:光标跳到下个字的字尾 按「b」:光标回到上个字的开头 按「#l」:光标移到该行的第#个位置,如:5l,56l。

4). 删除文字 「x」:每按一次,删除光标所在位置的“后面”一个字符。 「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行

5). 复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

6). 替换 「r」:替换光标所在处的字符。 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

7). 回复上一次操作 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

8). 更改 「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字 9). 跳至指定的行 「ctrl」+「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

4、Last line mode下命令简介 在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

A) 列出行号 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

B) 跳到文件中的某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

C) 查找字符 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

D) 保存文件 「w」:在冒号输入字母「w」就可以将文件保存起来。

E) 离开vi 「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。 「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

5、vi命令列表

1、下表列出命令模式下的一些键的功能: h 左移光标一个字符 l 右移光标一个字符 k 光标上移一行 j 光标下移一行 ^ 光标移动至行首 0 数字“0”,光标移至文章的开头 G 光标移至文章的最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 在光标位置前插入字符 a 在光标所在位置的后一个字符开始增加 o 插入新的一行,从行首开始输入 ESC 从输入状态退至命令状态 x 删除光标后面的字符 #x 删除光标后的#个字符 X (大写X),删除光标前面的字符 #X 删除光标前面的#个字符 dd 删除光标所在的行 #dd 删除从光标所在行数的#行 yw 复制光标所在位置的一个字 #yw 复制光标所在位置的#个字 yy 复制光标所在位置的一行 #yy 复制从光标所在行数的#行 p 粘贴 u 取消操作 cw 更改光标所在位置的一个字 #cw 更改光标所在位置的#个字

2、下表列出行命令模式下的一些指令 w filename 储存正在编辑的文件为filename wq filename 储存正在编辑的文件为filename,并退出vi q! 放弃所有修改,退出vi set nu 显示行号 /或? 查找,在/后输入要查找的内容 n 与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。

对于第一次用vi,有几点注意要提醒一下:

1、用vi打开文件后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。

切换方法:在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

2、编辑好后,需从插入模式切换为命令行模式才能对文件进行保存,切换方法:按「ESC」键。

3、保存并退出文件:在命令模式下输入即可!(别忘了wq前面的:)

Vi编辑器的基本使用方法
https://blog.ittst.com/posts/vi-editor's-basic-usage-method/
作者
浪子
发布于
2016-11-16
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file diff --git a/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html b/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html index 9a04b2e..df11881 100644 --- a/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html +++ b/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html @@ -1 +1 @@ -VK23黑苹果OpenCore0.8.5引导macOS12.6.1 - 平淡生活
\ No newline at end of file +VK23黑苹果OpenCore0.8.5引导macOS12.6.1 - 平淡生活
53 字
1 分钟
VK23黑苹果OpenCore0.8.5引导macOS12.6.1
2022-11-08
无标签

配置#

网卡更换为DW1560

截图#

1.png QQ20221108-141421.png QQ20221108-141440.png QQ20221108-141449.png QQ20221108-141458.png QQ20221108-141507.png QQ20221108-141517.png

正常工作 1.显卡 2.声卡 3.有线网卡 4.无线网卡 5.摄像头 6.读卡器 7.蓝牙 8.隔空投送

VK23黑苹果OpenCore0.8.5引导macOS12.6.1
https://blog.ittst.com/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/
作者
浪子
发布于
2022-11-08
许可协议
CC BY-NC-SA 4.0
\ No newline at end of file