为了提高各位使用 Handsome 主题的用户的加载速度，博主将 Handsome 主题的静态文件全部处理后存放在阿里云 CDN 上，未设置防盗链。供各位博主使用。[...]
宝塔纯净版介绍基于 BT 官方剥离了所有与 BT 官方的通信、上报、下发；所有功能与原版一致，不会有任何异常，如有任何问题请参考宝塔官方解决方案；提升为企业会员，软件商店中的所有「运行环境」、「免费插件」、「宝塔插件」、「专业版插件」、「企业版插件」；部分「第三方应用」安装可能会失败。宝塔 7.4.5 版本 [推荐/稳定版本]CentOS 安装命令根据系统执行框内命令开始安装（大约 2 分钟完成面板安装）升级后可能需要重启面板。yum install -y wget && wget -O install.sh http://download.hostcli.com/install/install_6.0.sh && sh install.sh升级纯净版官方 及其他破解版（7.4.5 至 7.5.2 版本之间所有版本均可），一键升级为 7.4.5 纯净版。wget -O update7.sh http://download.hostcli.com/install/update7.sh && bash update7.sh宝塔纯净版 7.4.5 版本说明一键安装，基于 宝塔7.4.5正式版 ，非7.4.5版本的请先使用 官方升级到7.4.5版本；本命令行升级安装，不影响网站数据，不宕机，不修改任何网站数据，无缝切换，升级后重启面板即可；2020-11-08 经站长测试，该净化版本已支持Debian系统；理论上宝塔支持的系统，纯净版都支持，但还是建议先测试；2020-11-13 某主机论坛站长反馈 /Api/SetupCount?type=会返回 ok 。接口只是适应/模拟官网，以便成功通过企业插件的安装校验，服务端并未做任何记录。宝塔纯净版 7.5.1版本（内测，不推荐正式建站使用）升级安装安装宝塔官方7.5.1版本 （不一定 7.5.1 ，差几个小版本都没影响）使用纯净版覆盖安装，代码如下。wget -O update7.sh http://www.hostcli.com/install/update7.sh && bash update7.sh宝塔纯净版 7.5.1 版本说明默认为企业版，到期时间：2099-01-29。包含 企业版所有插件 和 专业版所有插件 ，包含部分常用第三方插件。修复"升级通道"修复"修复功能"完全去掉上报功能，接口调用注释同步官网最新版本修改登录接口,不验证，不记录， 默认返回绑定号码 18988889999默认关闭活动推荐及在线客服功能7.5.1 纯净版 恢复到 7.4.5 纯净版wget -O update7.sh http://download.hostcli.com/install/update7.sh && bash update7.sh任意版本还原到官方最新版curl http://download.bt.cn/install/update6.sh|bash
这个类可以轻松使用，用于与 Mirai 后端交互。[...]
前言为了解决工程上大量图纸问题，博主研究了相关打图工具，本文简单介绍了最简单的批量打图方式。[...]
前言Aegis Authenticator 是适用于 Android 的免费，安全和开源 2FA 应用程序。它旨在为您的在线服务提供安全的身份验证器，同时还包括现有身份验证器应用程序中缺少的某些功能，例如正确的加密和备份。Aegis 支持 HOTP 和 TOTP ，使其与数千种服务兼容，甚至包括使用奇怪算法的 Steam。安装星路云盘 提供镜像下载。作为一款开源应用，该应用在 F-Droid 上提供，亦可在 Google Play 上下载。源代码在 GitHub 上开源。演示[album][/album]
前言Mirai 是一个在全平台下运行，提供 QQ Android 和 TIM PC 协议支持的高效率机器人框架。笔者将利用 mirai-api-http 搭建一个可以使用 http 通信的 API 后端。实验环境服务器：Ubuntu 20.04 LTS arm64服务器安装 JRE这里需要注意的是 JRE 分由 Oracal 公司自行编译的封闭的版本和由社区分发的开源版本。这里建议安装开源版本。$sudo apt update $sudo apt install default-jre服务器安装 mcl因为 Mirai 直接启动过于复杂，而大家都过于懒惰，所以就出现了 mirai-console-loader 项目（下称 mcl ），用于一键启动 Mirai 项目和管理插件。下载并解压点击 此处 前往下载最新版并解压。安装插件编辑 config/MiraiApiHttp/setting.yml 文件，修改配置如下。[collapse status="false" title="config/MiraiApiHttp/setting.yml"]## 该配置为全局配置，对所有Session有效 # 可选，默认值为0.0.0.0 host: '0.0.0.0' # 可选，默认值为8080 port: 8080 # 可选，默认由插件第一次启动时随机生成，建议手动指定 authKey: 1234567890 # 可选，缓存大小，默认4096.缓存过小会导致引用回复与撤回消息失败 cacheSize: 4096 # 可选，是否开启websocket，默认关闭，建议通过Session范围的配置设置 enableWebsocket: false # 可选，配置CORS跨域，默认为*，即允许所有域名 cors: - '*' ## 消息上报 report: # 功能总开关 enable: false # 群消息上报 groupMessage: report: false # 好友消息上报 friendMessage: report: false # 临时消息上报 tempMessage: report: false # 事件上报 eventMessage: report: false # 上报URL destinations: [] # 上报时的额外Header extraHeaders: {} ## 心跳 heartbeat: # 功能总开关 enable: false # 启动延迟 delay: 1000 # 心跳间隔 period: 15000 # 心跳上报URL destinations: [] # 上报时的额外信息 extraBody: {} # 上报时的额外头 extraHeaders: {}[/collapse]在终端上打开目录，运行下列命令以安装插件。$.\mcl --update-package net.mamoe:mirai-api-http --channel stable --type plugin运行下列命令以启动。./mclmcl 将自动下载安装相关组件并启动。考虑到 Linux 环境下无法使用常规方式解决验证码，需要定义常量 mirai.slider.captcha.supported 调整其行为。$java -Dmirai.slider.captcha.supported -jar mcl.jar亦可将 ./mcl 文件修改为上述命令后再启动。登录 QQ待相关依赖处理完毕后，既可和 mcl 交互。使用 /autologin add [account] [password] 以添加账户，然后重启 mcl未完待续
前言NFS 是 Network File System 的缩写，即网络文件系统。一种使用于分散式文件系统的协定，由 Sun 公司开发，于 1984 年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据，让应用程序在客户端通过网络访问位于服务器磁盘中的数据，是在类 Unix 系统间实现磁盘文件共享的一种方法。NFS 的基本原则是“容许不同的客户端及服务端通过一组 RPC 「分享相同的文件系统」，它是独立于操作系统，容许不同硬件及操作系统的系统共同进行文件的分享。定义导出目录：与客户端系统共享的目录。实验环境服务器：Ubuntu 20.04 LTS arm64客户端：Windows 10 企业版 20H2服务器部署NFS服务准备工作更新软件首先为了防止各种奇怪问题，笔者建议读者将服务器上的软件等更新到最新版。使用sudo apt update等更新软件包信息。防火墙处理由于笔者使用的是实验环境，故防火墙被关闭。使用下面的命令关闭防火墙。$ sudo ufw disable如需同时使用防火墙和NFS服务，请放行指定IP。$ sudo ufw allow from 0.0.0.0/0 to any port nfs使用下面的命令检查防火墙状态。$ sudo ufw status安装NFS内核服务器$ sudo apt install nfs-kernel-server -y通过NFS导出文件为客户端分配服务器访问权限NFS 使用 /etc/exports 文件记录访问权限，使用如下命令编辑。读者也可以自行选用其他编辑器，记得 sudo 就完事了。$ sudo nano /etc/exports笔者此处将/www/wwwroot/作为导出目录。假定该目录已经存在。下面介绍该文件的格式。由于 NFS 使用基于 IP 的授权管理方式，因为 NFS 本身的服务并没有进行身份登入的识别，因此 NFS 会将所有的操作映射为某个用户的操作，注意到文件系统的 inode 所记录的属性为 UID，GID，而非账号与群组名。那一般 Linux 主机会主动的以自己的 /etc/passwd， /etc/group 来查询对应的使用者、组名。所以当来自客户端的操作进入到该目录后，会参照服务器的使用者与组名。但是由于该目录的档案主要来自服务器 ，所以可能就会发生如下情况。服务器/客户端刚好有相同的账号与群组：则此时使用者可以直接交互。客户端发送的 UID 在客户端对应 $A$ ，在服务器对应 $B$ ：客户端在服务器上的操作会被映射为 $B$ ，这会导致严重的安全问题。所以 NFS 会根据配置文件将操作映射为指定的用户。极端情况是发送的 UID 的值为 $0$ 时，即对应 root 时，就可以任意搞事随意操作了。服务器并没有客户端发送的 UID 的信息：建立的各项数据在服务器端来看，就会属于无拥有者的资料。因此，配置文件按照下列格式书写，一行一条。[共享目录][网段]([配置])注释/www/wwwroot0.0.0.0/0(rw,sync,no_subtree_check)所有IP可读写，所做更改立即写入磁盘，不检查子树。/www/wwwroot192.168.1.1/24(ro,sync,no_root_squash)192.168.1.1/24 网段可读不可写，所做更改在内存中缓存，所做行为视为 root 操作。你的文件长这样（以井号开头的行为注释）。/www/wwwroot 0.0.0.0/0(rw,sync,no_subtree_check) /www/wwwroot 192.168.1.1/24(ro,sync,no_root_squash)各个配置的解释如下表。参数值内容说明可选`rw\ro`该目录分享的权限是可读写或只读。但最终能不能读写，还与文件系统及身份有关。否`sync\async`sync代表数据会同步写入到内存与硬盘中，async则代表数据会先暂存于内存当中，而非直接写入硬盘。否no_root_squash, root_squash当登录账户为root 或匿名时，所作行为按照 root 用户权限判断或所作行为按照匿名用户判断。是all_squash当登录账户为root 或匿名时，所作行为按照匿名用户的权限判断。是anonuid=114514无论如何所作行为按照UID 为 $114514$ 的用户的权限判断。是anongid=1919无论如何所作行为按照GID 为 $1919$ 的用户的权限判断。是处理文件夹权限问题如果没有其他服务需要使用该目录（比如 Nginx），建议直接授予匿名用户访问权限。使用下面的命令授予匿名用户访问权限。$ sudo chown nobody:nogroup /www/wwwroot/考虑到 Windows 没有诸如 UID 的概念，因此常常需要通过注册表指定 UID 和 GID 。1.在运行中输入 regedit ，打开注册表编辑器。2.进入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default 条目。3.选择新建- QWORD值，新建 AnonymousUid ，AnonymousGid 两个值，值为对应的 UID 和 GID 。可以全部设置为 $0$ 以获得 root 身份。4.重新启动计算机。重启服务器服务$ sudo exportfs -a $ sudo systemctl restart nfs-kernel-server客户端配置[scode type="red"]请勿使用资源管理器挂载，因为那玩意一般都很毒瘤。[/scode]安装可选功能在控制面板-可选功能中安装如图所示的功能。检查连通性showmount -e [server] 显示 NFS 服务器导出的所有共享。 showmount -a [server] 列出客户端主机名或 IP 地址，以及使用“主机:目录”格式显示的安装目录。 showmount -d [server] 显示 NFS 服务器上当前由某些 NFS 客户端安装的目录。挂载mount [远端地址] [挂载点路径]解除挂载umount 盘符 解除指定挂载 umount -f -a 解除全部挂载
自从网易云音乐网页歌单解析只能解析前几首歌后，包括但不限于music-dl工具只能解析单首歌曲和歌曲数目较少的歌单。现在本博客提出一种新的方式解决该问题。[...]
[hplayer media="netease" id="226989" type="song" size="large" auto="false" /]题面点击此处前往原题。John 在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边，并可以使你返回到过去的一个时刻（相对你进入虫洞之前）。John 的每个农场有 $m$ 条小路（无向边）连接着 $n$ 块地（从 $1 \sim n$ 标号），并有 $w$ 个虫洞。现在 John 想借助这些虫洞来回到过去（出发时刻之前），请你告诉他能办到吗。题解SPFA判断负环板子。代码#include <bits/stdc++.h> #define MANX 505 using namespace std; struct node { int dis, nex; } f; vector< node > mp[MANX]; int sum[MANX], fl[MANX] = { 0 }, flag; void spfa( int k ) { if ( fl[k] == 1 ) { fl[k] = 0; flag = 1; return; } fl[k] = 1; if ( !mp[k].empty() ) for ( int i = 0; i < mp[k].size(); i++ ) { if ( sum[mp[k][i].nex] > mp[k][i].dis + sum[k] ) { sum[mp[k][i].nex] = mp[k][i].dis + sum[k]; spfa( mp[k][i].nex ); if ( flag == 1 ) { fl[k] = 0; return; } } } fl[k] = 0; } int main() { ios::sync_with_stdio( false ); cin.tie( 0 ); int test, m, n = 0, w, x, y, z, k; cin >> test; while ( test-- ) { for(unsigned int i=1;i<=n;i++){ mp[i].clear(); } cin >> n >> m >> k; for ( int i = 1; i <= m; i++ ) { cin >> x >> y >> z; f.dis = z; f.nex = y; mp[x].push_back( f ); f.nex = x; mp[y].push_back( f ); } for ( int i = 1; i <= k; i++ ) { cin >> x >> y >> z; f.dis = -z; f.nex = y; mp[x].push_back( f ); } memset( sum, 0, sizeof( sum ) ); flag = 0; for ( int i = 1; i <= n; i++ ) { spfa( i ); if ( flag ) { break; } } if ( flag == 1 ) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }