随着openclaw的爆火,mac mini的销量也水涨船高,但为了openclaw单独去搞一台mac mini真的太奢侈了,我们用树莓派同样可以获得很好的openclaw体验。 安装的方法很简单, 直接运行以下命令即可 curl -fsSL https://openclaw.ai/install.sh | bash 廉价使用方案,接入GLM Coding plan计划 对于模型配置,在 ~/.openclaw/openclaw.json 中填入以下内容即可 { "models": { "providers": { "zai-glm-max": { "baseUrl": "https://api.z.ai/api/anthropic", "apiKey": "70********************CmE", "api": "anthropic-messages", "models": [ { "id": "claude-sonnet-4-5", "name": "GLM-4-Max (4.5 旗舰)", "reasoning": false, "input": [ "text" ], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, […]
普通视图
《树莓派不吃灰》035:使用树莓派5B运行openclaw,快速领取麦当劳优惠券
(AI出品,必须能跑)自动填充用户评论信息
用户首次评论提交后,保存其名称、邮箱等信息,下次再进入评论页面(或刷新后),自动将保存的信息填充到对应的输入框中。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>自动填充用户评论信息</title>
<style>
/* 简单样式美化,不影响核心功能 */
.comment-container {
width: 600px;
margin: 50px auto;
padding: 20px;
border: 1px solid #eee;
border-radius: 8px;
}
.comment-item {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: 500;
}
input, textarea {
width: 100%;
padding: 8px 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
font-size: 14px;
}
textarea {
height: 120px;
resize: vertical;
}
button {
padding: 10px 20px;
background-color: #42b983;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
}
button:hover {
background-color: #359469;
}
</style>
</head>
<body>
<div class="comment-container">
<h3>评论区</h3>
<div class="comment-item">
<label for="username">姓名:</label>
<input type="text" id="username" placeholder="请输入你的姓名">
</div>
<div class="comment-item">
<label for="useremail">邮箱:</label>
<input type="email" id="useremail" placeholder="请输入你的邮箱">
</div>
<div class="comment-item">
<label for="comment-content">评论内容:</label>
<textarea id="comment-content" placeholder="请输入你的评论内容"></textarea>
</div>
<button id="submit-comment">提交评论</button>
</div>
<script>
// 1. 获取页面中的DOM元素
const usernameInput = document.getElementById('username');
const useremailInput = document.getElementById('useremail');
const commentContentInput = document.getElementById('comment-content');
const submitBtn = document.getElementById('submit-comment');
// 定义localStorage的存储键名(方便后续维护)
const COMMENT_USER_INFO_KEY = 'comment_user_info';
// 2. 页面加载完成后,自动填充已保存的用户信息
function fillUserInfo() {
// 从localStorage中获取保存的用户信息(localStorage存储的是字符串,需要用JSON.parse转换为对象)
const savedUserInfo = localStorage.getItem(COMMENT_USER_INFO_KEY);
if (savedUserInfo) {
const userInfo = JSON.parse(savedUserInfo);
// 将保存的信息填充到对应的输入框中
usernameInput.value = userInfo.username || '';
useremailInput.value = userInfo.useremail || '';
}
}
// 3. 提交评论时,保存用户的姓名和邮箱信息
function saveUserInfo() {
// 获取输入框中的值(去除前后空格)
const username = usernameInput.value.trim();
const useremail = useremailInput.value.trim();
const commentContent = commentContentInput.value.trim();
// 简单表单验证
if (!username) {
alert('请输入你的姓名!');
return false;
}
if (!useremail) {
alert('请输入你的邮箱!');
return false;
}
if (!commentContent) {
alert('请输入评论内容!');
return false;
}
// 构造用户信息对象
const userInfo = {
username: username,
useremail: useremail
};
// 将用户信息保存到localStorage中(localStorage只能存储字符串,需要用JSON.stringify转换)
localStorage.setItem(COMMENT_USER_INFO_KEY, JSON.stringify(userInfo));
// 提示评论提交成功(实际项目中这里会对接后端接口,提交评论数据)
alert('评论提交成功!');
// 清空评论内容输入框(姓名和邮箱保留,方便用户再次评论修改)
commentContentInput.value = '';
return true;
}
// 4. 绑定事件
// 页面加载完成后执行填充逻辑
window.onload = fillUserInfo;
// 提交按钮点击事件
submitBtn.addEventListener('click', saveUserInfo);
</script>
</body>
</html>代码关键部分解释
localStorage 的使用
localStorage.setItem(key, value):用于存储数据,key 是存储的键名,value 只能是字符串类型,因此我们用 JSON.stringify() 将用户信息对象转换为字符串。
localStorage.getItem(key):用于获取指定键名存储的数据,返回值是字符串,因此需要用 JSON.parse() 转换回 JavaScript 对象,方便提取数据。
存储键名定义为常量 COMMENT_USER_INFO_KEY,后续如果需要修改键名,只需修改这一个常量即可,提升可维护性。
页面加载自动填充
利用 window.onload 事件,确保页面所有 DOM 元素加载完成后再执行填充逻辑,避免获取不到输入框元素。
先判断是否存在已保存的信息,存在才进行填充,避免出现 undefined 等异常。
表单验证与数据保存
提交时先去除输入框值的前后空格(trim()),避免用户输入无效的空白内容。
只保存姓名和邮箱,评论内容不保存,符合用户使用习惯(用户每次评论的内容大概率不同)。
提交成功后清空评论内容输入框,保留姓名和邮箱,方便用户再次提交新评论。
OpenClaw(Clawdbot) + Qwen 4.7 最新手把手教程,附飞书接入指南和 700+ Skill资源
OpenClaw (Github开源地址、官方文档 曾用名 Clawdbot, Moltbot) 是一个开源的个人 AI 助手,被描述为“真正能做事的 AI”
它的核心特点和功能:
- 真正的行动力: 它不仅能聊天,还能执行实际任务,例如清理收件箱、发送邮件、管理日历、办理登机手续等。
- 本地运行与隐私: 它运行在你的本地机器上(支持 Mac, Windows, Linux),这意味着数据由你掌控,不经过第三方围墙花园 。
- 多平台接入: 你可以通过常用的聊天软件与它交互,就像和一个同事聊天一样。支持 WhatsApp, Telegram, Discord, Slack, Signal, iMessage 等。也有教程提到支持接入飞书。
- 系统级权限: 它可以控制浏览器(填写表单、提取数据),甚至拥有完整的文件读写和运行 Shell 命令的权限。
- 可扩展性: 它支持“技能(Skills)”和插件,你可以下载社区提供的技能库(已有 700+ 个 Skill),或者自己编写脚本让它学习新能力 。
- 模型兼容: 它支持连接各种主流 AI 模型,包括 Anthropic (Claude), OpenAI,以及国产的 Kimi 2.5 等 。
简单来说,OpenClaw 就像是给大模型装上了“手”和“眼”,让它从一个只能聊天的机器人,变成了一个能操控你电脑、替你干活的全能数字员工。
懒人安装 OpenClaw
腾讯云在云端秒级部署OpenClaw全能助手:还配备了各 IM 端的完全指南教程

VPS 安装 OpenClaw
-
SSH 连接我之前买的吃灰的 4G VPS(最好使用非正式环境来搭建,以防数据被删),输入以下命令,回车
curl -fsSL https://openclaw.ai/install.sh | bash -
出现下图提示,表示安装成功。(在 Intsalling OpenClaw 会卡一下,静静等待安装成功)

VPS Intsalling OpenClaw -
进入设置页面,左右选择 Yes,回车

OpenClaw 设置 -
Onboarding mode 选 QuickStart。

OpenClaw 设置 Onboarding mode -
往下继续走,会看到 Model/auth Provider,我这里选择的是 Qwen,大家可以根据自己手里有的 AI Key 进行选择设置
- Qwen(OAuth)跳转的域名是:
chat.qwen.ai

OpenClaw 设置 Model/auth Provider - Qwen(OAuth)跳转的域名是:
-
会跳出 Qwen auth method

OpenClaw 设置 Qwen auth method -
这一步会让你打开域名链接是:
chat.qwen.ai(我要设置的是智谱 API Key,所以上一步是选择错了)
OpenClaw 设置智谱 API Key -
我直接 ESC 退出了安装流程,可以使用下面命令,继续安装设置
openclaw onboard --install-daemon -
上面我想选择的是智谱,这次改为使用 Z.AI(GLM 4.7),在 智谱获取 API Key,在 Enter Z.AI API Key 输入 Key 值,回车

OpenClaw 设置智谱 -
模型选择,选择智谱最高版本:GLM-4.7-flash,回车

OpenClaw 设置AI模型 -
选择最后一个跳过设置 Telegram、Discord、WhatsApp设置,后面教大家配置飞书。

OpenClaw IM 设置 -
接着就到了 Skills 设置页面
- Configure skills now? (recommended)
Yes - Show Homebrew install command?
Yes - Preferred node manager for skill installs
npm

OpenClaw 设置 Skills - Configure skills now? (recommended)
-
安装自己需要的 Skill(上下键切换,空格选中)

OpenClaw 设置要安装的 Skill -
然后是一系列配置,没有API或暂时用不上,但 Hook 三个都有用,建议选上(空格选中),选择完回车
-
Boot-md 是启动时注入 Markdown 文件,在会话开始时注入类似 README 的内容。
-
command-logger 是操作日志记录,记录本次会话中执行的命令与操作上下文。
-
session-memory 是开始新会话时保存当前会话上下文摘要,便于后续无缝衔接。

OpenClaw 设置 Hook -
-
问你想在哪用(孵化)你的机器人,两个选项:(默认推荐TUI,对新手来说,可能 Web UI 更友好。两者不是互斥关系,可以都选择安装。)
-
TUI,意思是终端UI,基本上就是命令行对话
-
Web UI,有一个对话的网页

OpenClaw 设置机器人
-
-
如果你的电脑正在运行网关或以前安装过,建议选重启。
- Gateway service already installed ->
Restart
- Gateway service already installed ->
-
如果想进入 TUI,输入:
openclaw tui,输入你想问的内容,看AI模型是否回复
OpenClaw TUI 设置
飞书接入 Openclaw
-
有人开发了飞书的 OpenClaw 插件,复制下面指令,粘贴到终端回车。
openclaw plugins install @m1heng-clawd/feishu -
安装后会显示如下界面。

OpenClaw 安装飞书火箭 -
打开飞书开放平台:https://open.feishu.cn/app?lang=zh-CN,点击「创建企业自建应用」,填写应用名称和描述

飞书开放平台 - 创建企业自建应用 -
然后在添加应用能力 -> 找到机器人,点击添加。(有些权限开通需要先有机器人能力)

飞书开放平台 - 添加应用能力 -
在应用的凭证与基础信息页面复制
App ID和App Secret。
飞书开放平台 - 凭证与基础信息 -
在 SSH 终端中输入:
openclaw config set channels.feishu.appId "换成你的App ID" openclaw config set channels.feishu.appSecret "换成你的App Secret" openclaw config set channels.feishu.enabled true
SSH OpenClaw 设置 -
然后需要重启网关,终端输入下面指令回车:
openclaw gateway restart -
上面操作很重要,否则下面飞书配置事件和回调时会出错。(未建立连接)
-
回到飞书应用「权限管理」页面,点击 开通权限,输入
im:message。
飞书开放平台 - 权限管理 -
继续搜索关键词,勾选下面这些应用身份权限,点击右下角确认开通权限:
-
contact:user.base:readonly
-
contact:contact.base:readonly
-
im:message(上面勾选了,这里就不用勾选了)
-
im:message.p2p_msg:readonly (需要bot能力)
-
im:message.group_at_msg:readonly (需要bot能力)
-
im:message:send_as_bot
-
im:resource (上传图片或文件资源)
-
-
事件配置和回调配置中,订阅方式都选“长链接”。(重点来了,很多人这里配置会出错。)

image-20260203144642451 -
在事件配置中点“添加事件”,把下面这几个加上
-
im.message.receive_v1(必需)
-
im.message.message_read_v1
-
im.chat.member.bot.added_v1
-
im.chat.member.bot.deleted_v1

image-20260203144813165
-
-
配置完成后,在「版本管理与发布」页面创建版本并发布。

image-20260203144942115 -
这时手机打开飞书,搜索:OpenClaw,就能找到应用机器人。
Openclaw 偷懒配置飞书
- 还有一种偷懒配置方法,就是让 AI 帮你配置(from stin的方法):
帮我把飞书接入 openclaw,插件安装指令:openclaw plugins install @m1heng-clawd/feishu - 不过插件安装后,需要在终端输入下面命令重启网关:
openclaw gateway restart - 然后,再发飞书App ID和Secret 给它配置完成。(注意:飞书开放平台还是需要自己手动配)
常用的命令推荐
- 启动Openclaw的TUI:
openclaw tui - 重启网关:
openclaw gateway restart - 开启新对话:
/new - 添加备用模型:
openclaw models fallbacks add [模型公司代号/模型名称]- 例如:openai-codex/gpt-5.2-codex
- 设置默认模型:
openclaw models set [模型公司代号/模型名称]- 例如:kimi-code/kimi-for-coding
OpenClaw Skills
很多人安装 OpenClaw,不知道用来做什么。
我觉得是缺乏场景和专属自己的Skill。
OpenClaw 会自动加载 Claude 全局安装的 Skill,这点还挺方便的。
如果不会写 Skill,可以从模仿或使用别人的 Skill 开始。
分享一个 OpenClaw 精选 Skill 库,已收录 700 多个 Skill。
https://github.com/VoltAgent/awesome-openclaw-skills
OpenClaw 其他 IM 配置教程
OpenClaw 一大亮点是支持各种各样的 IM 软件。常见的有 TG、 Discord、WhatsApp、IMessage、QQ(对 Markdown 渲染不太友好) 等等。
飞书对国人最友好, TG 最简单的,Discord 配置起来稍微复杂,但展示格式最好。
- 一键秒级部署,可视化面板快速接入QQ、企微、飞书、钉钉等IM应用,同时支持海外Discord、WhatsApp、Telegram等应用:点击查看详细教程
- VPS + Openclaw(Moltbot) + Discord 机器人配置教程:https://x.com/AppSaildotDEV/status/2016384987596206383(需要特殊环境访问)
- OpenClaw + MiniMax + 飞书 + ActivityWatch打造数字分身机器人?
OpenClaw 常见问题
kimi2.5的秘钥,显示401要怎么操作?
去 openclaw.json 里把 baseUrl 从 http://moonshot.ai 改成 http://moonshot.cn
2025,辞旧迎新。
去年的年度总结,放到今年二月来写,一方面是去年年底有点事不想写,另外只能归于拖延症了。
2025 年对我个人来说可能是人生中很特殊的一年,相比前几年有什么区别?我想主要是我自身的一些改变(包括思想、心态上的转变),不过最重要的一点还是标题描述的:辞旧迎新,断舍离,迎新我。
今年稍微改变一下年度总结的方式,以往都是以 个人、生活、工作 等角度分类描述,鉴于今年的特殊性,我想写的随性一点,抛开流水账式的表达,自由的自我描述给自己看。所写内容可能在工作、生活中随意穿插,至于能否表述清楚,难说。
断舍离
首先很感谢去年自己立下的一个小目标,今年算是完成了!曾经我以为很轻松的事情,没想到能缠着我这么久,回头想想也是感叹。我觉得可能也是对自己太自信了,不过从某种角度来看这对我来说可能也是一件好事。
都说英雄难过美人关,哈哈~ 原来放下一个人之后真的会希望 ta 能过的比和自己更好(以前我是不信的),不过我觉得我还是蛮专一的(哈哈)。
其实有些东西真的好简单,只是局内人难以看清。感性和理性有时候就是一念之间,把握当下,别想太多。从小老师和父母就教导我们要多听取他人意见建议,好好反思一下,做到了吗。有时候我们身处困境的时候,需要的可能只是敞开心扉,才能看清真正的自我。
不必遗憾,各自安好已是 happy ending~
寻真我
曾经我对中国的一些传统文化,只是一直持保留态度。今年,一次偶然的机会(亦或命中注定),在这一点上,我的观念发生了一些微妙的变化。
关于我偶尔会放空 思考宇宙万物存在的意义 这点在关于页面一直有写,从好早以前我就一直觉得作为人类生活在地球的我们真的好渺小,我们来世界走一遭的意义是什么呢,或者说我们怎么去找到这个可能并不存在的意义。可能这也是导致我对玄学颇有兴趣的主要原因,都说科学的尽头是玄学,谁又知道玄学玄在哪,人类数千年对它的探索又曾进行到哪了?这些问题太宏大,曾经的我也只是偶尔放空瞎想,不了了之。
今年我把这些未知放在了国学上去解释,我们拥有上千年的历史文化,对比西方科学的发展不过也才数百年。你可以说历史的封建迷信停滞不前,但没人真正知道曾经历史都经历过什么。
在未知中探索自我,在已知中寻求宁静。这是今年的主要状态,宇宙太大,找到自己真正想找寻的东西不容易,我觉得找到了一个方向。在这个方向向内求,发现一切似乎都能解释通了。我们总是追求太多,忘了知足常乐,有些东西 命里有时终须有,命里无时莫强求,就算你提前得到了那时你不该得到的东西,又能拿多久呢?有句至理名言:自我永远是最好的投资,我想这是完全正确的,有些东西不必争抢,修好自身德行,水到渠成。
信则有,不信则無。
探故知
回归现实,从 2025文章归档 来看今年去了不少地方,有时候户外的风景真的可以洗涤心灵,毕竟大家都生活在喧嚣红尘当中,着偶尔的眼前一亮,属实有利于身心~ 当然,这一年中也在工作和生活当中汲取了不少教训,其中也有一些让人感到失落的事情发生,好在这都在 寻真我 的途中有所化解,对于那些已经发生且不可逆转的事情且勿久念,把握当下,才能迎接更好的明天。
Life in an adventure about exploring..
人生就是一场旅途
今年应该是有两次公费旅游(其中有一次是苦苦的差旅!),后面那次去看到的风景真的漂亮,也是人生中第一次看到七彩祥云~ 虽然之前已经去了几次川西那边,也有天气好的时候都没看到,看来是分地段和机遇!那边天气好的时候真的宛如仙境,手机拍出来的样子就是眼睛看到的样子,真是个好地方。
G318游记之【天空之城】理塘
没错!一年一度的公费差旅他又来啦~ 公费差旅 这次的路线是半个G318川藏线,成都出发到巴塘,途径雅安 康定 理塘。这次仍是加我一起一共两人,我...
另外还有一次超长假期,请假来的(也是来这家公司请的最长的一次假,同时都惊了),目的地是我读书时期所待的地方,浙江。久别重逢,去那边见了近十年没见的同学,有些人变了一些,有些人则和以前差别不大。这次的浙江之行也是我第一次独自远行,以往川西那边也就几百公里,这次一个人走高速开了两千公里,期间充电休息 边充点走,也是惬意。
抵达浙江后去了表弟家,
以往读书那会,每逢寒暑假期,都催着我去那边玩(我不会说他是让我去补作业的哈哈,但确实很快乐)。到后无奈表弟一家盛情难却,导致一些计划出现变故,只好暂且搁置~ 期间故地重游之际给小姨他们买了些高价水果(我那边甚至有个做水果批发的同学,当时居然没想到上面去),原因是因为那家店就开在我爸最初在浙江打拼住的房子外,这么多年了一直屹立不倒。我还和店主寒暄几句,最后听到价格还是硬着头皮付了款,后面才知道这家店专供有钱人,是那边最贵的一家
.. 后面想想也是缘分,再一个小姨他们一家对我也很好,这个钱花的也是值得的。
在那边呆几天,几乎把当地吃喝玩乐全整了个遍,短短几天时间,却比我曾经在那边生活几年的活动范围还广不知道多少倍… 可见,当年我好像确实挺宅的
。
拼好假!国庆15天超长游记~
这个超长其实是有点东西的... 注:本文 TLDR; TLDR; TLDR; 多图预警!本文基本属于一篇记事文,和这个假期一样长!(我是按着手机里的相册来叙事...
然后临近年末的时候,又请假去了趟深圳和香港(顺带去了趟表姐那边,鸽
),这也是咱第一次去一线城市和国际城市,属实山炮进村了。不过还好,一切都还算顺利,也没出什么洋相哈哈。在香港还遇到一些热心友人,没有之前网上说的那么多歧视大陆,不过可能也是概率性事件。
她现在应该就在这个城市的某个地方吧..
也好..
香港之行也是一次值得复盘的旅行,和去浙江那篇文章一样,我按照 相册叙事 的形式将其记录成了超长文,我想这种类型的文章只适合本人观看
..
还是发生了很有意思的事情,都记录在下面这篇文章里了,感兴趣可以点进去看看。
还有一些琐事,不提了。
哦对了,去年七月那次事故对方现在还没调解,之前说了可以线上,后面一直没信了。我这边有一些车辆附加财产损失还没找对方处理。
新方向
每个人都有属于自己的方向,路是自己选的,就要做到无悔。任何事都有代价,为自己的选择付出相应的代价,不丢人。过程可以大于结果,享受过程并接受结果是一种境界。从理解到接受是一个过程,急不可得。
金钱是货币流通的工具,好好利用这个属性。
为什么有些人一直处于底层?这些人不团结,最擅长的就是一边找借口为自己的无能开脱,一边算计其他人。反观一些团体却挤在一起抱团取暖,真有意思。太多人错把把无知当个性,为一点小聪明沾沾自喜。不难发现,很多人根本不值得同情,这是句难听的实话。
好了,闲话少说。
新的一年,大家对自己好一点(苦了谁也不能苦了自己
),少考虑点别人的感受,多为自己活几次(因为你值得!)锚定方向,扬帆起航!!

我的腊八节一天是怎样过的
“就和每天一样。”
- 本文内容可能会引起部分人不适,请谨慎选择阅读。
- 本文不适合儿童以及心理承受能力较弱者。
凌晨
凌晨0点,坐在电脑前,玩一会电脑。
等母亲前半夜说完梦话和尖叫完,大概1点多,她起夜上厕所。上完厕所,到我门前,咣的怼一下房门,骂一句“睡觉”。
这才能躺下睡觉。
早上 4点 – 7点
4点,母亲醒来,开始在她房间里看短视频。
5点,母亲开始跟别人在微信上聊语音。
6点,母亲推开我的房门,从屋里拉出电线,接上卫生间的双缸洗衣机,开始洗衣服。
7点,洗衣机甩干,非常严重的撞桶,搞不平,就不停的撞桶。
我家也不是买不起洗衣机,但是卫生间门只有半米宽。这世上目前看不到能洗床单被罩和大件衣服的宽度小于半米的洗衣机。
厨房门倒是够宽,能勉强进一个普通的滚筒的自动洗衣机,但是厨房没有地方改管道装上下水。想要用的话就得自己定时看着洗衣机,到上水的时候自己往里灌水,到排水的时候就搞个盆接水然后端到卫生间倒在马桶里。说是有个邻居家里就这么搞,搞了几次后洗衣机被干坏了。不过就算洗衣机不坏,就现在这个身体状况,弯几次腰端水盆大概也能进医院。
我当然也试过自己修理,奈何后面拆开了也看不懂。在网上搜资料,也没有多少双缸洗衣机的内容。有一阵搜到过一个电器维修的视频,看账号是仍在更新维护的,但是发评论和发私信都是石沉大海,人家就是默默地更新视频,“从不回答我这种真实问题的求助”
上午 8点
8点,母亲突然猛推开我房门。
母亲大叫道:“赶快起来,你外公要跑!”
我急忙从床上坐起来,问怎么回事。
“你外公要跑,拦不住了。”
我被吓得一头汗。这几年本地已经有太多起老年人冬天自杀最后在河道里发现的案例了。
我继续问怎么回事。
“你外公要跑,幸亏你大舅发现了。”
我问到底怎么回事,是要往哪跑?发疯了?要跑回6年前卖掉的那个老房子?还是要自己跑回老家河南?
“你外公要去澡堂子洗澡。”
……
先把提到嗓子眼里的心放肚子里一半。
我问:“我外公不是说下个月2号再洗澡么?”
母亲:“记错了。”
也不知道到底是谁记错了。
我赶紧穿上衣服,然后准备洗澡用的东西,带几瓶饮料,准备出门。冬天的衣服额外厚重,穿衣服就花去几分钟。
母亲开始给大姨打视频,大姨没在家,跑出去听“课”了。最后说定是叫我大姨夫也去陪外公洗澡。
母亲打完视频,看我衣服已经穿完了,问:“你不吃早饭啊?”
“哪有时间吃!”
“不吃早饭洗澡不行。吃罐八宝粥吧。”说罢从阳台翻出来一罐冰冷的八宝粥。
我拉开门开始穿鞋。
母亲:“咱俩一起去啊?”
我:“你去干啥?”
“你外公让我过去做饭。咱俩一起去,打车!”
裤子都没穿呢还一起去,还打车。
我穿完鞋,拿起洗澡用的东西时,发现剃须刀也在包里。昨天刚剃过胡子,今天不需要剃须刀。我想把剃须刀放回屋里,但是已经穿上鞋了不方便进屋。我妈这个时候已经回屋,屋门都关上了,估计去刷短视频了。
于是只好把剃须刀丢鞋架上。
出门。
上午 8点15分 – 8点30分
平常去外公家都是坐公交车去,冬天要花10分钟走到主路,然后等约15分钟一班的公交车,运气好也需要至少50分钟才能到外公家。
现在着急。
想到手机支付宝里有个不知道哪里来的高德打车的打车券。
用支付宝叫了辆车,2分钟车就来了。
司机没按照导航走,走的外环。我是没啥意见,因为导航给的路线的红绿灯太多了。
但是外环的红绿灯也没少几个,更别说周一交通更是烂。好在本地学校早就放寒假了,没有出现完全堵死的情况。
下车前跟司机确认了可以先结单后支付,到了地方直接下车,直奔外公家。
上午 8点30分 – 12点
到外公家,外公已经等不及了。
给大姨夫打电话,大姨夫还在等车。我跟我大姨夫说直接去浴池吧。他答应完就把电话撂了。
搀着外公下楼,然后到小区门口打车去浴池。
上了车,我又给大姨夫打电话,再确认一下他是否知道要去哪个浴池。果然是再确认一下好,上次大姨夫陪外公洗澡还是几年前,现在外公中意的浴池已经不是原来的那个浴池了。打电话跟大姨夫说了现在这个浴池的地址。
到了浴池,交了三个人的钱进浴池。
这就算能喘息一会了。
拿出手机先把高德的订单支付了,这才发现那个优惠券不适用于我叫的出租车,相当于我自己全款打车。爱咋咋地吧,我反正已经没脾气了。
![]()
![]()
![]()
![]()
![]()
(写文的时候重新看了下订单,结果高德给的两个诱导性按钮,一个是【改价】一个是【投诉】,合着两个都是负面的?)
(然后上一次叫车是2022年9月份……北京看病那系列还没写完呢)
不一会大姨夫也到了。
洗澡
外公现在应该是97岁。实际年龄没人知道,建国前的,新中国成立建立户口制度的时候,出生日期瞎填的,也没人知道真实出生年月日。
本地几十年前,有个老年人在某个澡堂子洗澡时摔倒去世,澡堂子和家属撕扯了几年,最后澡堂子的人跑了(法庭判决根本没用,毕竟这社会是【按闹分配】的)。自那之后,一般澡堂子都要求高龄老人需家属陪同。
但是这个澡堂子的老板又抠又贪,很多高龄老人没陪同也让进。
外公特喜欢泡澡,泡完了还不立刻搓洗,而是跑到更衣室坐着。坏毛病。
全程都得看着,不然来个滑倒,就算没磕碰到,扭一下也要命。
外公搓完澡,我让大姨夫先搓,因为我洗澡慢,大姨夫洗澡快(大姨夫家里有热水器的,平常不去澡堂子),而外公洗完澡有时候就急着走。万一一眼没看住,人自己跑了,就大冬天这天冷路滑,摔一下也是致命的。
等我洗完,出来到更衣室。外公衣服已经穿一半了,我跟外公说让他和大姨夫先回家。外公家的饭桌很小,大舅一家2人大姨一家2人再算上外公和我和我妈的话根本坐不下,每次吃饭都不愉快,不如我晚点回去,等他们吃完了下桌后我再回去吃。
外公不乐意,非说一起走。
于是这俩人就在更衣室穿着羽绒服盯着我从光屁股穿到羽绒服。我身上都没干,头发都是湿的,最后水全吸进帽子里了。
出了浴池。我嘱咐我大姨夫说要搀着外公,小心滑倒。我到马路上叫了辆出租车。
回外公家。
中午 12点
往常外公洗澡都是8点出门,11点多回来,一般这时早就开饭了,大舅一家早就骂骂咧咧说吃饭太晚。
这回都12点了,还没开始做饭。
我妈倒是很生气:“你剃须刀落鞋架上了,我给你拿过来了。”
厨房有特别大一袋子的大果子(学名是:油条)。
大姨开始拿着油条让别人吃。
大姨夫吃了两根油条,然后就回他自己家了,都没留下来吃中午饭。
又给我塞油条。我不吃。
“吃啊!为什么不吃!”
中午饭,大米饭,紫圆葱炒鸡蛋。
吃到半途,外公要喝水,瓷杯就放在椅子边缘,然后倒热水的时候就跟大姨抢杯子,然后杯子就掉地上摔碎了。这是摔碎的第几个杯子已经数不清了。
开吵。反正吵点就是外公把杯子放在椅子边缘。
抬头一看,一家人都喜欢把瓷杯瓷碗的贴着桌椅边缘放。就跟杀手电影的场景一样,总把东西放在致命错误的边缘一样(这样一旦入侵者触碰到立刻就死了),只不过根本就没有那杀手素质,只不过当犯错遭了损失时没人发现,就灰溜溜藏起来当没发生过一样,然后下次继续。
(仅是我自己家,锅碗瓢盆放在柜子高处边缘,然后无意间碰掉下来,噼哩噗噜又砸到桌子上的锅碗瓢盆,最后连摔带砸连锁反应跟房子塌了一样。以前我或许还会关心一下,现在只要人没受伤,就拉倒了)
午饭吃到最后,紫圆葱还剩个底,扔了浪费但是留着占盘子。我大姨说:“你直接拿盘子盛饭把圆葱都吃了。”我端着盘子盛了点米饭,直接在厨房把剩下那点全吃了。
大姨:“这辈子头一次用盘子盛饭吃饭吧。以前都没用盘子吃过饭吧。”
下午 1点
吃完午饭已经是下午一点多了。
收拾完餐桌。
大姨又开始拿着油条让我吃。
大姨:“吃啊!为什么不吃!你早上不是没吃饭吗!”
我:“现在都是下午了。”
大姨对着我妈说:“你看他那熊样,越来越像XXX了”
XXX是他妈的我最恨的一个亲戚。
妈了个逼的。
下午 1点半
出门在附近走走。
外公家附近有个连锁超市,有时候会有特价的可乐或者红茶绿茶。我外公每次洗澡都要喝饮料,一半喝,一半漱口吐掉。
结果到了超市,发现啥特价商品都没有,原来的特价区堆满了过年老头老太太喜欢屯的罐头和奶。店老板则在那开大会PUA员工。我最后啥都没买就走了。
回来路上路过另一个连锁的零食超市,发现这个店里有其他店没有的商品。随便买了其他店没有的东西。
回到外公家,母亲看到我拎着超市的袋子,来了句:“跑这么老远最后就买了个XXX?”(XXX是连锁店品牌的名字)
下午 2点
母亲和大姨没有要走的意思。平时这个时候早就要回家了。
这回说是要包包子。不仅要包包子,还要蒸熟了才行。要是饺子就可以包完了了冻上,包子就必需蒸熟了。
我于是自己先回家了。
到公交站,等了10多分钟公交车。
最后到家已经是3点了。
先检查一下家里水龙头是否都关了,暖壶热水瓶是否都盖了盖子,没在使用的电器什么的是否关了电源。
然后到厨房发现,汤锅里泡着一个碗,用黏糊糊的液体和油做了水封,也看不出到底是吃完早餐后在汤锅里泡碗,还是什么奇怪的仪式,没敢动。
已经累得不行了,进屋在床上躺了2个小时,醒来时已经是晚上5点了。
晚上 5点 – 9点
下午5点多,母亲回家。
煮了点糊涂粥(小米兑水煮出来的一种粥),微波炉加热一下几天前的剩菜和剩包子,剩菜有一股微微的发酸的味道,也没人在意。晚餐就这么糊弄完了。
吃完晚饭已经晚上7点了。
我妈从袋子里翻出来件衣服,说是给我买的冲锋衣。
我上一次要穿冲锋衣,还是2019年,当时我妈嚷嚷了半天最后没穿,结果是遭大罪了(参见母亲看病记录(第一部分:沈阳北部战区总医院篇-上篇))。
后来再有机会拿出来那件冲锋衣的时候,已经是 2024 年冬天了。很可惜由于5年没穿过,冲锋衣外胆已经完全烂掉了。只好把外胆扔了。内胆还能继续穿,不过只能抵住秋天的小雪天。
我衣柜里还有好多衣服,基本都是2016年之前买的,大部分都是穿了超过10年的老衣服。反正没穿破就行。有几件衣服和裤子都是穿破了或者烂掉了我才肯扔,扔的时候我妈特不乐意,“这么好的衣服说扔就扔”,更别说要是被我大姨他们知道了,闲话就更是多,“花这么多钱买衣服,真有钱。”“衣服好好的你怎么就能穿破了呢。”“衣服穿破了就扔,多浪费。”然后就找机会给你送他们家没人穿的旧衣服,“这都是好面料好材质的,花钱‘专门’‘给你’买的,就我家里人穿不下不合适才问你要不要。”
我现在门上还挂着件能扔洗衣机里洗的棉服(2013年买的,淘宝快照已经被删除了)。棉服能水洗还能用洗衣机这设定是真神奇,我一直舍不得扔。但是2023年年初的时候因为穿得太频繁,口袋磨破了。本来只要补一下就行,但是家里会针线活的只有我大姨。这要让他知道了,那闲话就更没完了。但又舍不得扔,在门上挂了3年没戏。感觉真窝囊。
![]()
今年年初的时候,整理了一下旧衣服和裤子,其中衣服洗坏的一件,穿破的一件,裤子穿破的更多。准备扔了,但是我说要扔,我妈就不高兴。
我现在身上这件羽绒服,上一次穿还是2021年,要不是因为我坚持塞真空收纳袋里了(当时我妈可抗拒了,说羽绒服抽真空那不就废了吗),可能下场就跟冲锋衣一样也烂了。
结果现在情况就是旧衣服,能穿的穿不过来,旧衣服不让扔, 然后疯狂的在破短视频平台买破衣服。
这不是为你好吗!
(PS,假如是我自己买的新衣服的话,也是千万别让她发现,不然哪一天看不顺眼就给你扔了)
打开包装试了一下新买的衣服。屁的冲锋衣,就一棉袄,又肥又大,根本就不是我的尺寸。
我也没正经试,生怕我妈看上眼了。
赶紧让我妈退了。
我妈立刻:“我不会退。”
在手机上找了半天,最后在微信视频号里找了个退货,99包邮。太晚了今天已经不能上门取货了,而且这个店也不支持驿站退货。最快的上门取件是明天上午09:00-11:00。
我问我妈明天上午在不在家,我妈说在家,说完就后悔了,要是快递来得太晚,就耽误出去玩了。
我回到自己屋里。
开始流鼻血。
晚上 9点以后
晚上9点,母亲开始刷短视频。
我到厨房,把之前买的10多块钱的草莓从冰箱里翻出来,全都发黑长毛了,全扔了,一口没吃到。
然后把晚饭使用过的的碗筷拿出来重新刷洗一遍。
也不知道是中了什么邪,还是有什么「高人指点」,从去年年初开始,我妈就开始不认真刷碗了,她刷完的碗筷上沾满了食物残渣。
一般这时候就自由了,可以专心做一些自己想做的事情,写代码或者玩游戏啥的。
只不过精力体力都已经完全见底了,坐在电脑前啥欲望都起不来。
晚上10点,母亲开始黑着灯听短视频。差不多听到快11点她就睡觉了。
我熬到凌晨1点左右,过了母亲晚上的梦话和尖叫阶段。
我睡觉。
文末
以上内容全部发生在同一天。未使用【艺术概括】或【典型化】等艺术效果。
没错,跟【腊八】一点关联都没有。
明天继续重复相似的日子。
(写这篇文章的时候,发现母亲正准备用发霉长了霉斑和绿毛的花生做煮花生吃)
The post 我的腊八节一天是怎样过的 first appeared on 石樱灯笼博客.干翻 Copilot?Chrome 这个隐藏功能,我踩坑 3 次终于开启了!
大家好,我是喜欢折腾工具的阿斌。

最近看朋友圈和公众号,总有人发 Chrome 浏览器带 AI 侧边栏的截图。
说实话,我之前对这类消息没太在意。但前段时间,我正好领到了一年免费的 Gemini Advanced (Google Pro) 会员福利(不用白不用)。
既然手里握着这个平时卖 20 美元/月的“核武器”,我就总想着把它用回本。 但老实说,网页版的体验很割裂——写东西的时候,要在“文档页面”和“AI 页面”之间来回切,感觉完全没发挥出 Pro 版该有的效率。
如果真能像 Copilot 那样把 AI 挂在侧边栏,随时调用我的 Pro 模型,那才算没浪费这波福利。
心动不如行动。
我凭着印象找了一些之前的教程,今天下午专门花时间实操了一下。
结论是:真能用,香也是真香,但坑也是真多。
我本来以为改个设置就行,结果折腾了半个多小时。最搞心态的是,这东西没有任何报错提示——你以为你设好了,重启一看,右上角空空如也,完全不知道哪一步出了问题。
为了让大家别像我一样瞎猜,我把这套 “避坑版” 开启流程记录下来。Windows 用户跟着做,稳过。Mac 用户我也准备了方案。

完整操作教程
2026年2月1日:亲测有效
Windows、MacOS 用户都可尝试,就是设置界面不同,流程都差不多
-
网络环境:美区
-
在 Chrome 浏览器地址栏输入
chrome://flags,打开下面几个 flagchrome://flags/#glic->Enabledchrome://flags/#glic-side-panel->Enabledchrome://flags/#glic-pre-warming->Enabledchrome://flags/#glic-z-order-changes->Enabledchrome://flags/#glic-actor->Enabledchrome://flags/#glic-fre-pre-warming->Enabled

Chrome浏览器设置 Flag -
查看Gmail账号是否为美区账号:https://policies.google.com/terms
-
Chrome 浏览器设置为英文
-
打开 Settings(设置) > Languages(语言),点击 Add languages 添加英语,勾选 "Display Google Chrome in this language"(以这种语言显示 Google Chrome),然后点击 Relaunch(重启) 即可生效。
-
MacOS用户:在系统设置 - 在“语言与地区”拉到下面,找到“应用程序”点击加号就行。

MacOS 设置Chrome浏览器语言 # Mac OS 可以用这个命令改浏览器语言,这样就不用改系统语言了(永久的,跟上面界面设置效果一样,二选一即可) defaults write http://com.google.Chrome AppleLanguages '("en-US")' # mac系统,打开终端,输入以后命令后回车(一次性使用,重启Chrome浏览器就会失效) open -n -a "Google Chrome" --args --variations-override-country=us
-
-
杀死全部 Chrome 进程,完全退出 Chrome 浏览器
-
修改 Chrome 用户目录的
Local State(文件名中间有空格),Chrome 有多个版本,stable / beta / dev 等,请自行查找:'win32': { 'stable': '~/AppData/Local/Google/Chrome/User Data', 'canary': '~/AppData/Local/Google/Chrome SxS/User Data', 'dev': '~/AppData/Local/Google/Chrome Dev/User Data', 'beta': '~/AppData/Local/Google/Chrome Beta/User Data', }, 'linux': { 'stable': '~/.config/google-chrome', 'canary': '~/.config/google-chrome-canary', 'dev': '~/.config/google-chrome-unstable', 'beta': '~/.config/google-chrome-beta', }, 'darwin': { 'stable': '~/Library/Application Support/Google/Chrome', 'canary': '~/Library/Application Support/Google/Chrome Canary', 'dev': '~/Library/Application Support/Google/Chrome Dev', 'beta': '~/Library/Application Support/Google/Chrome Beta', }, -
以 stable 版为例,用户目录为:
-
Linux :
~/.config/google-chrome -
Windows :
~/AppData/Local/Google/Chrome/User Data -
MacOS :
~/Library/Application Support/Google/Chrome
-
-
Local State需要修改
variations_permanent_consistency_country,is_glic_eligible,variations_country几个字段,将 cn 修改为 us, false 修改为 true, 版本号不用修改 。
Windows Local State路径 "variations_permanent_consistency_country":["144.0.7559.109","us"] "is_glic_eligible":true "variations_country":"us"
Local State参数设置 -
桌面右键 Chrome 浏览器 - 快捷方式 - 目标:最后添加
--variations-override-country=us"C:\Program Files\Google\Chrome\Application\chrome.exe" --variations-override-country=us -
重启 Chrome,重启后,可以在 Chrome 的右上角看到带 ☆ 的 Gemini 按钮,点击即可开启 Gemini 侧边栏。

Gemini in Chrome 开启成功
来自:x
方法一
动手能力强的可以选择这个
环境要求
- Python
3.13+(见.python-version/pyproject.toml) - 已安装 Google Chrome(Stable/Canary/Dev/Beta)
⚡️ 快速开始(uv)
- 克隆 Github 仓库到本地:lcandy2/enable-chrome-ai: Enable Gemini in Chrome, AI Powered History search, DevTools Al Innovations in Google Chrome without cleaning data and reinstall.
- 安装 uv(一次性):
- Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" - macOS & Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh - 更多安装方式请参考 uv 安装文档。
- Windows:
- 安装依赖(自动创建虚拟环境):
uv sync。 - 运行脚本:
uv run main.py。 - 补丁过程中 Chrome 会被关闭;重启后根据提示按 Enter 结束。
⚡️ 快速开始(pip)
- 创建并激活虚拟环境。
- 安装依赖:
python -m pip install psutil。 - 运行:
python main.py。
🔧 做了什么
- 自动定位 Windows / macOS / Linux 上的 Chrome Stable / Canary / Dev / Beta 用户数据目录。
- 关闭顶层 Chrome 进程以避免文件锁,再在补丁后恢复。
- 在
Local State中递归查找并将所有is_glic_eligible设为true。 - 在
Local State中将variations_country设为"us"。 - 在
Local State中将variations_permanent_consistency_country设为["<版本号>", "us"]。 - 重启补丁前已运行的 Chrome 版本。
⚠️ 已知限制 / 注意事项
- 脚本假设
User Data/Local State已存在;若缺失可能直接失败(可先启动一次 Chrome 生成配置)。 - 只有在能从进程信息中取到可执行文件路径时,脚本才会自动重启 Chrome。
- macOS 上按进程名(
Google Chrome*)识别,可能会终止不止"顶层"应用进程。 - Linux 上按可执行文件名
chrome识别;若你的发行版/安装方式使用其他名字,可能不会关闭 Chrome(从而仍可能有文件锁)。
🛟 注意
- 脚本会修改现有 Chrome 配置,如需保险请先备份
User Data。 - 使用拥有该 Chrome 配置的同一系统用户运行,确保有写入权限。
- 与 Google 无关,风险自担。
来自:x
方法二
-
先完全退出 Chrome 浏览器,在 MacOS 电脑打开终端

MacOS 打开终端 -
按行输入下面 4 条命令,再打开 Chrome 浏览器
cp ~/Library/Application\ Support/Google/Chrome/Local\ State \ ~/Library/Application\ Support/Google/Chrome/Local\ State.bak sed -i '' 's/"is_glic_eligible":[[:space:]]*false/"is_glic_eligible":true/g' \ ~/Library/Application\ Support/Google/Chrome/Local\ State sed -i '' 's/"variations_country":"cn"/"variations_country":"us"/g' \ ~/Library/Application\ Support/Google/Chrome/Local\ State sed -i '' 's/"variations_permanent_consistency_country":[[:space:]]*\[\([^]]*\),[[:space:]]*"[^"]*"\]/"variations_permanent_consistency_country":[\1,"us"]/g' \ ~/Library/Application\ Support/Google/Chrome/Local\ State
来自:x
聊聊商业模式——迪士尼
打算把我相对能看得懂的公司商业模式捋一遍,今次讲讲迪士尼。老规矩,内容都是来着我自己这个老股东的理解,从开始建仓到现在,核心仓位拿了很多年了,也是我较大仓位长持的公司中整体回报率最低的一家。我一直奉行只买自己熟悉和(相对能)看得懂的公司这样一个基本原则,因此职业的关系手里大部分持仓都是科技股,像迪士尼这样的公司显得比较另类。
迪士尼是一家传统媒体公司,核心就是内容创作和内容分发,不过和它的竞争对手比起来,它也是向科技激进转型(并且挣扎的)的 “新媒体”。如果说传统媒体有 Comcast 或者 Paramount,纯粹的新媒体像是 Netflix,那么迪士尼就好像是夹在中间。
就像之前分析阿里巴巴这艘商业巨轮一样,要去理解迪士尼的商业模式,可以从这样三个部分来分别审视:
- 第一版图:娱乐。它贡献了不到一半的营收和不到三成的利润,包括流媒体和电视网络,以及内容授权。
- 第二版图:体验。略微不到四成的营收,却贡献了接近六成的利润,这其实就是乐园和游轮了,也包括一些周边商品和服务。
- 第三版图:体育。营收和利润都占小头,基本就是 ESPN。
护城河
迪士尼大概是地球上护城河最宽的非必须消费类公司之一,它的乐园、游轮,还有流媒体,都是护城河,但是一切护城河的核心在于 IP。所有的乐园、游轮、电影、商品,全都是围绕 IP 来运作的,没有 IP,就没有百年迪士尼。
比方说,现在有环球影城这样的主题乐园,发展很快,但是它们始终没法威胁到迪士尼的乐园。原因很简单,因为其它的主题乐园它们再豪华,也不是迪士尼认证的,没有迪士尼那些孩子们心中卡通人物的乐园。你也可以建造最刺激的过山车,但是它肯定不是星球大战过山车,也肯定不是冰雪奇缘过山车。你还可以生产便宜的玩具,但它肯定不是正版的米奇和他的朋友们,也不会是钢铁侠、绿巨人,或者朱迪或者尼克。所以,一句话,IP 就是护城河,IP 就是溢价。
从这个角度来说,IP 的推广,占据用户心智,才是迪士尼的根基。这也是我后来慢慢理解为什么迪士尼要自己做流媒体,砸钱做,即便一年一年亏钱还要继续砸。这里并不是一个简单的自己做流媒体远期能够提高利润率等方面的问题,这是一个生死存亡的问题。如果继续使用 Netflix 的平台,那么哪一天 Netflix 决定掐住迪士尼的喉咙,不让电视上继续播放迪士尼的的卡通形象,这些 IP 不能深入新一代孩子们的内心,无论这个过程有多缓慢,那最终迪士尼的这个经典的盈利的飞轮就彻底转不起来了。
前面说的体验部分和娱乐部分,基本都是围绕着迪士尼那些著名 IP 展开的,这是迪士尼最根基的商业模式。在此之上,也能看到一些其它次要一点的护城河,比如乐园、游轮也好,度假区也罢,都具备一个完整的消费环境,衣食住行,全部都在这个密闭的环境里面完成,结果就是,请把美好回忆带走,但务必把钱留下,这也是它第二重要的商业模式。通常来说,我是不太喜欢重资产的商业模式的,不过它的商业模式和护城河太经典和强悍了,我觉得可以为迪士尼开一个例外。
不过迪士尼的体育板块,还是和上面的略有区别,它的护城河主要是长期锁定的直播权。这部分逻辑上比较简单,并且是租来的,成本肯定没有完全自有的护城河那么可控,也没有那么强悍。
三大版图:娱乐、体验和体育
先说娱乐版图,它包含传统电视、流媒体和占比较小的内容销售。传统电视已经基本上是夕阳产业,现在在娱乐部分依然是贡献大头的利润,但是这部分没有成长性,逐渐萎缩。流媒体是 “转型的主力” 和 “全村的希望”,其实也可以说是刚刚转盈利,但是毕竟开始赚钱了,希望它是一个真正的困境反转。
流媒体伴随着盈利逐渐改善,有一个变化,就是不再纠结于用户数量的提升,而是通过涨价提升 ARPU 和增加广告收入。市场是很乐于看到涨价的,涨价也说明了用户粘性和护城河。
接着是体验版图,这有点像是阿里巴巴的传统电商部分,营收最高并且利润率低于娱乐部分,但能够不断提供源源不断的现金流来发展新业务(特别是前几年持续支持流媒体烧钱)。
美国的本土乐园其实保持低速增长就不错,但是国际乐园还是有很大的空间。只要没有疫情这样的黑天鹅,游轮业务也能逐渐缓慢扩张。总之,这部分通常比较稳定,这部分也是较重的资产和员工人数的主要来源。
最后是体育版图,ESPN 是盈利的,但是面临体育版权费越来越贵的压力。从内容上看,Hulu 和 ESPN 最初似乎都和 Disney 的背景格格不入,但是这是迪士尼扩展用户群的一着棋。ESPN 曾经是非常赚钱的,包括联盟费和广告费等等,但是现在因为有线电视的衰退,这部分有点往鸡肋方向靠拢。然而,无论利润率如何,ESPN 有它的战略地位,ESPN 是 Disney 和 Netflix 竞争的重要筹码。
失去的十年
和很多巨头不一样的是,从 2015 年到现在(2026 年),差不多十年了,迪士尼的股价一直在一个范围内波动,没能获得突破。这挺让人感慨,然而看似卡住的股价背后,发生了天翻地覆的变化。这个转身对于如此传统的一家媒体巨头来说,实属不易。这让我想起了微软 Office 上云的商业模式迁移。
首先,710 亿天价收购 Fox,主要目的是扩充 IP 库。Fox 收购是伤筋动骨的(别忘了当时的净利润只有 120 多亿),为此背负了巨额债务。但是老 Bob(Bob Iger)还真的是既有眼光,又有魄力,如果没有这笔收购,没有内容怎么做流媒体,只有那米老鼠和漫威等等几十部电影。而且除了内容,还拿到了 Hulu 的控制权,这不但从儿童动画拓展到成人剧集,而且技术和运营上它的经验对于做 Disney+是很有帮助的。这笔收购的战略意义太过重大,要是没有 Fox 收购,就没有今天的阿凡达,就没有 X 战警,也没有辛普森和冰河世纪;要是没有 Fox 收购,迪士尼就没法做流媒体,IP 和品牌就会慢慢衰落,前面已经说到了。看看 Paramount,它也是传统媒体,也有海绵宝宝和 Paw Patrol 之类的一堆 IP,但是现在呢,被 Oracle CEO 拉里埃里森的儿子收购和合并。所以,从今天的角度看,这把操作代价是巨大的,但是整体看来还是正确而重要的一步。
然后就是做 Disney+烧钱,跟 Netflix 正面刚。就像一个退休了的老头重新出山来和年轻人在科技领域竞争,学习怎么玩互联网,很不容易,直到现在也谈不上 “擅长”——现在 Netflix 的利润率接近三成,而 Disney+只有个位数。但是因为传统的电视领域的衰落,这是它没有退路的一步棋。从这个角度看,百年老店迪士尼还是非常值得尊敬的,我相信大多数企业都抗不过这个时代的变革。
之后再加上疫情的打击(这类非必须消费而且是重资产,疫情打击是非常大的),分红被迫暂停,股本也一路膨胀,一直到 2023 年结束。之后因为财务状况改善,才慢慢通过回购好起来,现在大致还算处于一个变革期,但是从回购恢复和分红增长来看,最艰难的时间可能已经过去了。
风险与未来
如今,市场关心 Bob Iger 二次出山之后,他需要再次隐退,那谁来接班呢?这可能是短期内迪士尼最大的风险,想起之前 CEO Bob Chapek 被认为把财务放在艺术和传统之上,得了大罪,于是 Bob Iger 被迫重新出山。其次,是袭来的 AI 革命,对于传统动画制作门槛的降低,那么多不确定性都等待尘埃落定。再一个,就和很多重资产的经营一样,这一类生意的脆弱性——疫情也好,衰退也好,一旦出现,它就会受到直接的打击。
再来说说和 Netflix 的竞争,市场迫切希望看到 Disney+能将迪士尼的增长带出来。在我看来,如果要去和 Netflix 拼内容宽度,是没有胜算的。Netflix 在流媒体这块的统治力太足了,无论是内容库的丰富程度还是技术的成熟度,都是迪士尼无法望其项背的。
那么,迪士尼还是要靠自己的 IP,也许用户量没法和 Netflix 比,但是用户心智对于 IP 的深度要培养起来。如果流媒体搞成功了,迪士尼的未来可以打八十分往上,但是如果没搞成功呢?也未必是世界末日,如果我们换个角度思考,和流媒体起着生死攸关作用的 Netflix 不同,对于迪士尼来说,或许流媒体未必非得要有多少盈利,它完全可以只扮演一个 “药引子”——流媒体本身只是渠道,用户看了 Netflix 的动画,整个消费场景就结束了;而用户看了迪士尼的动画,消费场景才刚刚开始,之后他会去乐园、去游轮,去买周边等等。
最后,在这个竞争上,迪士尼还有一个优势,就是 Disney+的动画、Hulu 的神剧和 ESPN 的体育直播捆绑起来的优势,这里面有很多 Netflix 完全没法竞争的内容。
我们在比护城河的时候,主要是在比商业模式。Netflix 呢,它虽然成长很快,但它只有单纯的流媒体和相应的内容,全球用户已经到 3.25 亿了,往上的空间不大,增长很快会遇到天花板(从它最近要收购华纳兄弟来看,也许管理层觉得这一天已经到来了)。因此把时间放长来看,除非它有了新的业务拓展曲线,否则我认为 Netflix 的护城河和 Disney 是完全没法比的。
总之,迪士尼是一家成熟,但在努力转型以根上时代的公司,成长性看起来没有很多互联网公司那么强,但是我还是相信它在这些经典 IP 上的积累,相信它的商业模式,也相信它能平安度过科技转型和困境反转的阶段,价值得到回归。百年迪士尼为我们童年带来过美好的回忆,我真心希望它可以再继续创造经典的角色,陪更多的孩子们度过童年。
《四火的唠叨》文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接
VPS选国内还是国外
Photo by Domaintechnik Ledl.net / Unsplash
前些日子因为Virtualizor面板漏洞导致 CloudCone、HostSlick 等多家 IDC 被入侵,遭勒索攻击,按这些IDC服务商的尿性肯定不会交赎金的,而且交了赎金也不一定会给你恢复数据。
所以买了这些机器的博友们数据几乎全部都丢失了,有备份的朋友重灌系统后重新恢复即可,只是稍微麻烦了一些。至于赔偿嘛就想都别想了,不知道看谁贴了个协议截图,本来想贴个图上来但是不记得在那里看到到的了,大致意思是协议里面写了这种情况他们不用负责,当然具体是不是这样较真的可以去看看,但是目前所有人都没有收到赔偿相关的邮件。
至于NAS界也不太平,先是飞牛被爆了0Day漏洞,其实飞牛在爆出这个漏洞之前就有大手子在论坛反应了这个问题,但是根据帖子内官方回复内容来看有点没有太在意的感觉,直到陆续开始有用反应连接数过长、网络不稳定的异常情况时才发现问题,且这个问题已经存在了很多个版本了。
昨天又看到博友分享群晖提示紧急更新以防被勒索病毒攻击的新闻。
多的先不扯,聊回来VPS这个事。
我目前用的国内的腾讯轻量云,配置2C2G3M,每次都是买的3年的新用户福利机,这个配置大概80-90元一年,到期换个子账号可以重新接着买,目前已经续费到第二轮过半了,用了这么久几乎没出过问题,非常安心,速度也嘎嘎快。
那么为什么大多数博友们还是愿意牺牲一些速度想选择国外的服务器呢?
其实我发现很多博友选择国外服务器的原因是因为网站备案和审查限制制度,而且经常因为敏感内容问题接到监管质询的电话,让大家觉得很不自由。
在博客圈里待了这么久的我也对这个情况也做了一些总结,发现大家主要被审查的无非都是在网站上公开的文章内容,以及一些访客的评论互动,其中涵盖了敏感内容导致。
其实我们完全可以利用现在的 Jamstack 结构对前后端做异地部署以达到内容分离的效果。
我目前是后端通过未公开的Ghost服务作为CMS来编写文章,在Github上通过Action利用Astro拉取CMS内的文章数据生成站点的静态内容,再重新部署回国内的VPS。
其实只将部署回国内VPS这一步改成部署到Netlify、Cloudflare Page或者其他什么服务上,将站点的主域名绑定过去,即可实现前后端的异地分离效果,国内VPS随便绑定一个xyz之类的便宜域名即可让你的文章重新恢复自由。
同时国内的这台服务器还能部署其他不公开的服务,同时享受到国内的急速线路和我感觉相对稳当的VPS服务。
完全免费的网站状态监控服务 - UptimeFlare
完全免费的网站状态监控服务 - UptimeFlare ​
UptimeFlare 是一个基于 Cloudflare Workers 的 Serverless 网站状态监控服务,完全免费且易于部署。本文将详细介绍其技术架构、核心功能实现以及开发部署流程。项目 fork 自 lyc8503/UptimeFlare,在原有基础上进行了界面美化和功能优化。在线演示:status.weizwz.com,项目地址:weizwz/UptimeFlare。预览图如下:
![]()
技术栈概览 ​
![]()
系统架构 ​
整体架构 ​
![]()
数据流 ​
-
监控流程
Cron Trigger → Worker 检查 → 更新 D1 → 记录状态/故障 -
页面渲染流程
用户访问 → Pages 请求 → 读取 D1 → SSR 渲染 → 返回 HTML -
实时更新流程
Worker 定时检查 → 状态变化 → 更新数据库 → 前端轮询/刷新
项目结构 ​
UptimeFlare/
├── components/ # React 组件
│ ├── MonitorCard.tsx # 监控卡片
│ ├── MonitorDetail.tsx # 监控详情
│ ├── DetailBar.tsx # 数据可视化
│ ├── MaintenanceAlert.tsx # 维护通知
│ ├── IncidentsDrawer.tsx # 历史故障侧边栏
│ └── OverallStatus.tsx # 整体状态
│
├── pages/ # Next.js 页面
│ ├── index.tsx # 主页
│ ├── incidents.tsx # 历史故障页面
│ └── api/ # API 路由
│ └── data.ts # 数据接口
│
├── worker/ # Cloudflare Worker
│ └── src/
│ ├── index.ts # Worker 入口
│ ├── monitor.ts # 监控逻辑
│ ├── store.ts # 数据存储
│ └── util.ts # 工具函数
│
├── locales/ # 国际化
│ ├── en/ # 英文
│ ├── zh-CN/ # 简体中文
│ └── zh-TW/ # 繁体中文
│
├── types/ # TypeScript 类型
│ └── config.ts # 配置类型定义
│
├── uptime.config.ts # 监控配置
├── wrangler.toml # Worker 配置
├── next.config.js # Next.js 配置
└── package.json # 依赖管理
开发指南 ​
1. 安装依赖 ​
npm install
2. 监控配置项 ​
重要
uptime.config.ts 里的监控服务 monitors 建议首次就配置好,尤其是里面的 id,多次修改会造成脏数据。所有配置项都可以参考 uptime.config.full.ts 文件
const pageConfig: PageConfig = {
// 标题
title: '服务状态 - weizwz',
// 分组,根据 monitors 里的服务 id
group: {
基础服务: ['weiwz', 'blog', 'picture'],
实用工具: ['nav', 'cover'],
演示项目: ['fun_animation', 'charts']
}
}
export const workerConfig = {
monitors: [
{
id: 'blog', // 唯一标识,不要随意修改
name: '博客',
method: 'HEAD',
target: 'https://note.weizwz.com/', // 必需,监控 url
statusPageLink: 'https://note.weizwz.com/', // 项目点击链接,有了之后界面可以点击跳转
preview: 'https://p.weizwz.com/siteshot_note.webp' // 监控项目主页预览图,非必须
}
],
notification: {
webhook: {
// 通知必需,建议去 `https://resend.com/` 注册,免费。后面有具体教程
url: 'https://api.resend.com/emails',
payload: {
from: '系统状态更新 <uptimeflare@updates.weizwz.com>', // 你的线上监控服务域名
to: ['xxxxxx@gmial.com'], // 你的邮箱
subject: 'UptimeFlare 状态更新',
text: '$MSG'
}
}
}
}
// 公告,非必须
const maintenances: MaintenanceConfig[] = [
// {
// title: '图床服务维护',
// body: '正在进行图床服务器升级维护,预计2小时完成',
// monitors: ['picture'],
// start: '2026-02-01T18:00:00+08:00',
// end: '2026-02-21T23:00:00+08:00',
// },
]
3. 本地数据库初始化 ​
重要说明:
- ✅ 数据库文件自动创建:首次运行
npm run dev时,Wrangler 会自动在.wrangler/state/v3/d1/目录创建 SQLite 数据库文件 - ⚠️ 表结构需要手动创建:数据库文件虽然自动创建,但
uptimeflare表需要手动执行 SQL 创建 - ⚠️ 数据需要手动导入:表创建后,需要手动插入初始数据或从生产环境导入
步骤 3.1:启动开发服务器
npm run dev
# 此时会自动创建数据库文件,但表结构未创建,页面无数据
# 访问 http://localhost:3000
步骤 3.2:创建表结构
# 使用 init.sql 初始化表结构
npx wrangler d1 execute UPTIMEFLARE_D1 --local --file=./init.sql
步骤 3.3:初始化数据
选择以下任一方式:
- 手动插入空数据(首次部署)
# 插入空的初始状态
npx wrangler d1 execute UPTIMEFLARE_D1 --local \
--command "INSERT INTO uptimeflare (key, value) VALUES ('state', '{\"overallUp\":0,\"overallDown\":0,\"lastUpdate\":0,\"incident\":{},\"latency\":{}}')"
- 从生产环境导入(推荐)
# 1. 从生产环境导出数据
npx wrangler d1 execute UPTIMEFLARE_D1 \
--command "SELECT value FROM uptimeflare WHERE key = 'state'" \
--json > .wrangler/backup_data.json
# 2. 让 AI 将数据导入到本地,或者手动使用脚本
python3 .wrangler/import_local_data.py
附导入脚本
#!/usr/bin/env python3
"""
UptimeFlare - 本地数据导入脚本
从生产环境导出的 JSON 数据导入到本地 D1 数据库
使用方法:
1. 先从生产环境导出数据:
npx wrangler d1 execute UPTIMEFLARE_D1 \
--command "SELECT value FROM uptimeflare WHERE key = 'state'" \
--json > backup_data.json
2. 运行此脚本导入到本地:
python3 scripts/import_local_data.py
"""
import json
import subprocess
import sys
import os
def main():
# 检查备份文件是否存在
backup_file = "backup_data.json"
if not os.path.exists(backup_file):
print(f"❌ 错误: 找不到备份文件 '{backup_file}'")
print("\n请先从生产环境导出数据:")
print(' npx wrangler d1 execute UPTIMEFLARE_D1 \\')
print(' --command "SELECT value FROM uptimeflare WHERE key = \'state\'" \\')
print(' --json > backup_data.json')
sys.exit(1)
# 读取备份数据
print(f"📖 读取备份文件: {backup_file}")
try:
with open(backup_file, 'r', encoding='utf-8') as f:
data = json.load(f)
except json.JSONDecodeError as e:
print(f"❌ 错误: JSON 格式错误 - {e}")
sys.exit(1)
except Exception as e:
print(f"❌ 错误: 读取文件失败 - {e}")
sys.exit(1)
# 提取 state 数据
if not data or len(data) == 0:
print("❌ 错误: 备份文件为空")
sys.exit(1)
# Wrangler 导出的格式通常是数组,取第一条记录
if isinstance(data, list) and len(data) > 0:
state_value = data[0].get('value')
elif isinstance(data, dict):
state_value = data.get('value')
else:
print("❌ 错误: 无法识别的数据格式")
sys.exit(1)
if not state_value:
print("❌ 错误: 找不到 'value' 字段")
sys.exit(1)
print(f"✅ 成功读取数据 ({len(state_value)} 字符)")
# 转义 JSON 字符串中的特殊字符
# 将单引号替换为两个单引号(SQLite 转义方式)
escaped_value = state_value.replace("'", "''")
# 构建 SQL 命令
sql_command = f"INSERT OR REPLACE INTO uptimeflare (key, value) VALUES ('state', '{escaped_value}')"
print("\n🔄 导入数据到本地 D1 数据库...")
# 执行 wrangler 命令
try:
result = subprocess.run(
[
'npx', 'wrangler', 'd1', 'execute', 'UPTIMEFLARE_D1',
'--local',
'--command', sql_command
],
capture_output=True,
text=True,
check=True
)
print("✅ 数据导入成功!")
print("\n📊 Wrangler 输出:")
if result.stdout:
print(result.stdout)
# 验证导入
print("\n🔍 验证导入结果...")
verify_result = subprocess.run(
[
'npx', 'wrangler', 'd1', 'execute', 'UPTIMEFLARE_D1',
'--local',
'--command', "SELECT key, LENGTH(value) as value_length FROM uptimeflare WHERE key = 'state'"
],
capture_output=True,
text=True,
check=True
)
print(verify_result.stdout)
print("\n✨ 完成! 现在可以重启开发服务器:")
print(" npm run dev")
except subprocess.CalledProcessError as e:
print(f"\n❌ 错误: 导入失败")
print(f"错误信息: {e.stderr}")
sys.exit(1)
except FileNotFoundError:
print("\n❌ 错误: 找不到 npx 命令")
print("请确保已安装 Node.js 和 npm")
sys.exit(1)
if __name__ == "__main__":
main()
步骤 3.4:重启开发服务器
# 停止之前的服务器(Ctrl+C)
# 重新启动
npm run dev
# 现在应该可以正常访问了
生产部署 ​
1. 创建 Cloudflare API 令牌 ​
创建步骤如图示,注意第 5 步的时候,要添加对数据库 D1 的编辑权限,是这个默认模板里没有的,之后就是继续确定等操作了。
![]()
创建完成后记得复制 API,然后将该 API 绑定到你的 Github 仓库,key 名:CLOUDFLARE_API_TOKEN
![]()
2. 创建通知 API ​
去 https://resend.com/,注册并创建一个 API,API 复制备用。然后再创建一个 domain 来绑定你的 API。如果你的域名直接在 CloudFlare 上托管的话,直接会提示自动修改 CloudFlare 的 DNS 解析,如果是其他服务商的域名,需要你按他的要求去修改。
![]()
同 Cloudflare API 一样,这个 API 也去 GitHub 仓库添加并绑定,key 名:RESEND_API_KEY
3. 创建部署到 CloudFlare 的工作流 ​
在 GitHub 仓库的 Action 里,直接运行已有的工作流 .github/workflows/deploy.yml
![]()
4. 在 CloudFlare 里查看服务并检查 ​
运行正常的话,你的 Workers 和 Pages 里会多出两项服务,一个 uptimeflare page 和一个 uptimeflare_worker,数据库里会多出一个 uptimeflare_d1 数据库。
![]()
去 uptimeflare page里设置一下自定义域,即可访问你的状态监控服务
![]()
注意事项 ​
-
D1 数据库限制
- ✅ 免费版:每天 100,000 次读取
- ⚠️ 单次查询最大 1MB
- ⚠️ 写入有延迟(最终一致性)
-
Worker 限制
- ✅ CPU 时间:10ms (免费) / 50ms (付费)
- ⚠️ 内存:128MB
- ⚠️ 请求大小:100MB
-
Next.js Edge Runtime
- ⚠️ 不支持 Node.js API
- ⚠️ 不支持某些 npm 包
- ✅ 使用
runtime = 'experimental-edge'
-
本地数据库
- ⚠️ D1 本地数据库与生产环境完全独立
- ⚠️ 本地调试需要导入数据
- ✅ 数据库文件位于
.wrangler/state/v3/d1/目录 - ✅ 重置数据库:删除
.wrangler/state目录后重新执行步骤3
参考资料 ​
Frp打洞后内网Nginx反代
Photo by Alex Cheung / Unsplash
家里这台NAS从24年10月开组,系统用的飞牛OS,最开始用无线网卡出过几次问题,后来换成有限网卡后趋于稳定。不过官方最近报了个0day漏洞出来炸了锅,不过我情绪还算比较稳定,在期初系统选型时就在黑裙、OMV、truenas、飞牛之间犹豫了很久,最后还是选择了拿安全换方便。
机器从最开始的3D打印机箱+闲置硬盘上手,到后面的疾风知N52机箱+两块4T硬盘上手,后续为了「一步到位」换了10盘位的机箱+陆续上到了7块硬盘,那时的我还不知道短短一年多时间,当时买的这些硬盘能翻上好几倍变成了理财产品。
因为电信不给申请公网服务,所以选择了Frp+中继服务器打洞,当时图方便直接使用了Frp自带的转发服务,但随着玩机的深入,部署的容器服务也从此前的几个增长到了几十个,Frp转发服务的一些问题逐渐暴露出来,如:
- 个别服务需要用到WebSocket服务,但是Frp转发服务没法自定义这些配置,
- 不能对域名下的不同路径转发做处理
- 性能较差,我的体验是看影视资源经常要等个四五秒才能开始播放
- 每个服务一个配置项,管理不方便
所以昨天花了一两个小时从原来的Frp转发服务切换到了Nginx反代。
Frp的修改
原来Frps上设置了vHost相关配置需要取消掉
bindAddr = "0.0.0.0"
bindPort = 8010
quicBindPort = 8010
subDomainHost="test.com"
auth.method = "token"
auth.token = ""
transport.tls.certFile = ""
transport.tls.keyFile = ""
transport.tls.trustedCaFile = ""Frpc部分的修改则是备份一下原来的配置文件,把所有转发都删除掉,只留下一个TCP通道
serverAddr = "frpsip"
serverPort = 8010
auth.method = "token"
auth.token = ""
transport.protocol = "tcp"
transport.tls.certFile = "client.crt"
transport.tls.keyFile = "client.key"
transport.tls.trustedCaFile = "ca.crt"
[[proxies]]
name = "web-raw"
type = "tcp"
localIP = "192.168.0.12" # NAS 本机 Nginx 监听地址
localPort = 14433 # NAS 本机 Nginx 监听端口
remotePort = 4433 # 对应请求 frps 的附带的 remote_portNginx配置
因为站点比较多,希望用一个简短好管理的方式来维护站点,所以这里和AI搏斗了很久,最后用一个map来管理服务列表,一个通用server来代理所有服务,如果有特殊设置的服务则单独写一个server块明确指定ServerName来进行设置。
# 2. 核心路由映射 (已去重并分类)
map $host $upstream {
hostnames; # 启用主机名匹配模式,性能更好
# 常用服务
1.test.com https://192.168.0.12:31111;
2.test.com http://192.168.0.12:31112;
aria.test.com http://192.168.0.12:31113;
default http://192.168.0.12:31110;
}
# 4. 特殊配置:是否开启代理缓冲 (解决 SSE 或长连接卡顿)
map $host $proxy_buff {
hostnames;
~^deeplx\. off; # 流式翻译建议关闭缓冲
default on;
}
# --------------------------------------------------
# 独立 Server 通过明确指定server_name提高优先级
# --------------------------------------------------
server {
listen 14433 ssl http2;
listen 4433 ssl http2;
server_name aria.test.com;
ssl_certificate frp.crt;
ssl_certificate_key frp.key;
include ssl_security.conf; #独立的ssl配置文件
client_max_body_size 0; # 允许 BT 大文件
proxy_request_buffering off; # 实时上传进度
proxy_buffering off; # SSE / WebSocket 不缓冲
# ---------- 公共头 ----------
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 86400s;
# ---------- JSON-RPC 入口 ----------
location = /jsonrpc {
proxy_pass http://192.168.0.12:6800/jsonrpc;
}
# ---------- AriaNg 等静态面板 ----------
location / {
proxy_pass http://192.168.0.12:31113;
}
}
# --------------------------------------------------
# 兜底 Server
# --------------------------------------------------
server {
listen 14433 ssl;
listen 4433 ssl;
http2 on;
server_name *.test.com;
ssl_certificate frp.crt;
ssl_certificate_key frp.key;
include ssl_security.conf;
# 应用动态变量
client_max_body_size 0;
proxy_buffering on; # 默认开启缓冲提升性能
proxy_request_buffering off; # 建议关闭请求缓冲,方便大文件上传进度实时显示
# 公共 Proxy 配置模板
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 86400s;
# 通用路由
location / {
proxy_pass $upstream;
}
}且因为使用了Nginx,可以回家在连局域网时搭配Smartdns直接将解析指向NAS服务器,Nginx上同时监听4433实现局域网访问。
目前可以通过一个比较简短的conf文件维护二十几个docker服务,还算是比较方便,性能也更好。
这个方法如果有什么问题希望各位大佬指正。
才发现那么快,该进入高速了
该渲染由 Shiro API 生成,可能存在排版问题,最佳体验请前往:https://www.hansjack.com/notes/7
路是自己走的,要知道,大学前两年走到哪里取决你的意志所在。
2023-2025年我错过了很多,26年决定了我如果想升学,可能就要选考研的路子。
2026年或许跟身边人的关系拉近了,不那么僵化,因为我本身也自带孤独,我的老同桌也经常说我:猛兽总是独行,牛羊才成群结队。
一路没有同伴,一路都是自己一步一步走来的。
可笑的是有一次我睡过了头,身边的冉,我就很生气:为什么自习没有叫醒我!
又是一年的奋战,希望这篇日记告诉自己:开始清醒了,我的内心,一年后见分晓!
为你踩坑系列:搭建Flarum论坛的一天一夜
该渲染由 Shiro API 生成,可能存在排版问题,最佳体验请前往:https://www.hansjack.com/posts/deploy/flarum-forum-setup-issues-and-solutions
苦了我一天一夜的前言
昨天半夜睡不着,哦不,是又犯捣鼓兴趣了,群里一堆论坛大佬,我也想搞一个论坛试试 (不能浪费一点我的服务器)。这篇文章也记录了我踩的坑和思路:
1、选择Docker还是直接框架搭建?
直觉告诉我,必须Docker,相比较直接的LNMP等框架,Docker占用内存小并且搭建很快速。
![]()
如果你偏要选择一点一点部署,好吧,我放在下面了 参考官方文档:安装 | Flarum Documentation
2、Docker搭建Flarum
我一开始选择Docker应用商店里面的Flarum的,妈的,发现设置不了账号密码,并且Docker部署的项目的数据库放在”虚拟空间“中,在宝塔里面也没有管理的方式 (可能我太菜了),所以我选择了docker-compose进行拉取和配置文件。
![]()
2-1 创建镜像文件
docker-compose.yml 放在你想放的文件夹,比如我选择网站目录:/www/wwwroot/bbs/docker-compose.yml
另外还有 flarum.env
DEBUG=false
FORUM_URL= #设置自己网站地址,刚开始也可以设置成公网IP+端口号
# Database configuration
DB_HOST=mariadb
DB_NAME=flarum
DB_USER=flarum
DB_PASS= #和上方设置的密码保持一致
DB_PREF=flarum_
DB_PORT=3306
# User admin flarum (environment variable for first installation)
# /!\ admin password must contain at least 8 characters /!\
FLARUM_ADMIN_USER= #网站管理员账户
FLARUM_ADMIN_PASS= #密码和上面的密码保持一致
FLARUM_ADMIN_MAIL= #管理员邮箱
FLARUM_TITLE= #网站标题
然后docker-compose.yml写入内容 (vi 编辑,i 编辑,esc 退出编辑,:wq 保存编辑)
services:
flarum:
image: mondedie/flarum:stable
container_name: flarum
env_file:
- flarum.env
volumes:
- /var/lib/docker/volumes/flarum/assets:/flarum/app/public/assets
- /var/lib/docker/volumes/flarum/extensions:/flarum/app/extensions
- /var/lib/docker/volumes/flarum/storage/logs:/flarum/app/storage/logs
- /var/lib/docker/volumes/flarum/nginx:/etc/nginx/flarum
ports:
- 8080:8888
depends_on:
- mariadb
mariadb:
image: mariadb:10.5
container_name: mariadb
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_DATABASE=
- MYSQL_USER=
- MYSQL_PASSWORD=
volumes:
- /var/lib/docker/mysql/db:/var/lib/mysql
2-2 拉取镜像
docker-compose up -d
然后给容器部署网站域名,并且添加SSL
2-3 更新Flarum
我是莫名其妙更新的,因为拉取插件的时候使用了 -W 导致直接更新到最新版本 1.8.x
3、Flarum需要的操作
让我们先到容器里面再操作:
比如宝塔的:
![]()
然后到flarum的目录:
![]()
你也可以直接:
# 进入容器
docker exec -it flarum sh
cd /flarum/app
3-1 添加中文
composer require flarum-lang/chinese-simplified
php flarum cache:clear
3-2 安装插件
composer require xxx
3-3 卸载插件
composer remove xxx
3-4 清除缓存
php flarum cache:clear
3-5 开启Debug
在app目录里面有config.php文件:
ls
然后编辑即可:
vi config.php
修改debug的false为true
4、出现的问题
4-1 无法写入文件
无法写入文件。请检查操作权限,重试或者直接从命令行运行命令。
清除缓存XHRPOST
https://bbs.tiango.wiki/api/cache
[HTTP/2 409 92ms]
Flarum\Foundation\IOException in /flarum/app/vendor/flarum/core/src/Api/Controller/ClearCacheController.php:56
Stack trace:
#0 /flarum/app/vendor/flarum/core/src/Api/Controller/AbstractDeleteController.php(24): Flarum\Api\Controller\ClearCacheController->delete()
#1 /flarum/app/vendor/flarum/core/src/Http/RouteHandlerFactory.php(41): Flarum\Api\Controller\AbstractDeleteController->handle()
#2 /flarum/app/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}()
#3 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\ExecuteRoute->process()
#4 /flarum/app/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(33): Laminas\Stratigility\Next->handle()
#5 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Api\Middleware\ThrottleApi->process()
#6 /flarum/app/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(44): Laminas\Stratigility\Next->handle()
#7 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\CheckCsrfToken->process()
#8 /flarum/app/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(69): Laminas\Stratigility\Next->handle()
#9 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\ResolveRoute->process()
#10 /flarum/app/vendor/flarum/core/src/Http/Middleware/SetLocale.php(51): Laminas\Stratigility\Next->handle()
#11 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\SetLocale->process()
#12 /flarum/app/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Laminas\Stratigility\Next->handle()
#13 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\AuthenticateWithHeader->process()
#14 /flarum/app/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(31): Laminas\Stratigility\Next->handle()
#15 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\AuthenticateWithSession->process()
#16 /flarum/app/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(63): Laminas\Stratigility\Next->handle()
#17 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\RememberFromCookie->process()
#18 /flarum/app/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle()
#19 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\StartSession->process()
#20 /flarum/app/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle()
#21 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Api\Middleware\FakeHttpMethods->process()
#22 /flarum/app/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle()
#23 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\ParseJsonBody->process()
#24 /flarum/app/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle()
#25 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\HandleErrors->process()
#26 /flarum/app/vendor/flarum/core/src/Http/Middleware/InjectActorReference.php(25): Laminas\Stratigility\Next->handle()
#27 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\InjectActorReference->process()
#28 /flarum/app/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(75): Laminas\Stratigility\Next->handle()
#29 /flarum/app/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process()
#30 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Middlewares\RequestHandler->process()
#31 /flarum/app/vendor/middlewares/base-path-router/src/BasePathRouter.php(99): Laminas\Stratigility\Next->handle()
#32 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Middlewares\BasePathRouter->process()
#33 /flarum/app/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(36): Laminas\Stratigility\Next->handle()
#34 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Laminas\Stratigility\Middleware\OriginalMessages->process()
#35 /flarum/app/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle()
#36 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Middlewares\BasePath->process()
#37 /flarum/app/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle()
#38 /flarum/app/vendor/laminas/laminas-stratigility/src/Next.php(49): Flarum\Http\Middleware\ProcessIp->process()
#39 /flarum/app/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(75): Laminas\Stratigility\Next->handle()
#40 /flarum/app/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(64): Laminas\Stratigility\MiddlewarePipe->process()
#41 /flarum/app/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(73): Laminas\Stratigility\MiddlewarePipe->handle()
#42 /flarum/app/vendor/flarum/core/src/Http/Server.php(45): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#43 /flarum/app/public/index.php(26): Flarum\Http\Server->listen()
#44 {main} admin.js:2:323396
问题可能:
HTTP 409 状态码
代表 “冲突”(Conflict),Flarum 的 ClearCacheController 返回这个错误通常是 缓存正在被占用或锁定。
可能是之前清理缓存的操作未完成,或者某个进程正在写缓存。
IOException
指的是 Flarum 在写入缓存文件时失败。
缓存目录不存在或不可写
缓存目录里残留了被锁定的文件
文件系统不支持锁(某些容器卷挂载方式可能不支持文件锁)
容器卷挂载问题
如果 /storage 或 /public/assets 挂载到宿主机卷上,宿主机文件系统可能 不支持 flock 或锁操作,导致清缓存失败。
查看 storage/cache 目录是否存在锁文件:
/flarum/app # ls -lh /flarum/app/storage/cache
total 16K
drwxr-xr-x 3 991 991 4.0K Sep 6 09:47 02
drwxr-xr-x 3 991 991 4.0K Sep 6 09:47 37
drwxr-xr-x 3 991 991 4.0K Sep 6 09:47 77
drwxr-xr-x 3 root root 4.0K Sep 6 09:44 ee
/flarum/app #
显然出现锁文件root用户的:
rm -rf /flarum/app/storage/cache/ee
4-2 无法连接部署的sonic
添加中文搜索功能使用docker部署的sonic项目
具体操作:
出现下面报错:
PHP Warning: stream_socket_client(): Unable to connect to tcp://127.0.0.1:1491 (Connection refused) in /flarum/app/vendor/ppshobi/psonic/src/Client.php on line 66 Invalid sonic server detail!
可能是docker网络连接问题:
可以通过创建网络:
docker network create flarum-net
把 sonic 加入:
docker network connect flarum-net heuristic_visvesvaraya
把 flarum 也放进同一个网络(我的 flarum 容器叫 flarum):
docker network connect flarum-net flarum
在 flarum 配置里改 Sonic 地址:
'host' => 'heuristic_visvesvaraya',
'port' => 1491,
'password' => 'SecretPassword', // 跟 sonic.cfg 里保持一致
重新执行:
php flarum sonic:addtoindex
4-3 插件更新容易出现的JS问题
TypeError: can't access property "type", t is undefined
pushObject Store.ts:125
pushPayload Store.ts:103
preloadedApiDocument Application.tsx:367
...
说明 Flarum 在加载数据时,后端返回的 API 数据不符合预期。通常发生在:
- 插件更新后 API schema 变了,但前端 js 还是旧的,导致
Store.pushPayload收到的 JSON 数据里缺少type属性。 - 缓存问题:前端还在加载老版本的 JS,和后端新版不匹配。
- 插件 bug 或冲突:某个扩展返回了错误的 JSON(比如返回
null或者结构不完整)。 - 数据库字段缺失/迁移没跑:插件升级后需要执行
php flarum migrate,不然返回的数据格式异常。
php flarum migrate
php flarum cache:clear
我失业后能干啥
Photo by Norbert Braun / Unsplash
可能是因为行业持续低落我始终忍不住把一切往最坏的方面靠拢。
所以最近忽然开始思考,如果有一天我失去了目前的一切之后我还能依靠哪些技能继续找到足以糊口养家的体面工作?我感兴趣的又是那些方面呢?
广告制作
因为门店平时经常做活动,需要设计活动对应的广告传单、宣传物料等。最开始我们全是找外面广告公司来做的,但是感觉沟通成本太高了,效率、质量都不太让我满意。
所以在看了对方制作了几次之后我开始在自己电脑上安装CorelDraw,这是一个用起来有点类似Photoshop的设计工具,它更偏向矢量设计,但是没Adobe Illustrator 那么强大,不过排版功能很强大。
后来学会在nipic这种素材站上下素材,再做对应修改后做出更漂亮的成品,后续几次和广告公司老板沟通后发现我这水平在他们那里找一份5到6k的工作没有问题。
或者自己开个广告公司,其实接触这么多年下来,发现很多广告公司其实根本没有打印设备,都是找同城代打、印刷,如果本地没有还能联系成都的同行进行处理,所以理论上有人和电脑就行了,当然这方面最重要的当然是客户,我目前接触过这么多产品代理,零售店,真要去做资源这块应该还是没问题的。
这是我最优把我的创业选项了。
编程
得益于自己对编程的兴趣和父母对我的培养,目前还是有一些程序思维的,自己也比较喜欢代码、科技方面的东西。加上现在AI的加持,感觉自己什么都能碰上两手。
不过目前都是基于兴趣驱动,虽然理论上制作网站、程序在死磕的情况下应该是没有问题的,但是对于有没有实际生产力还是没信心的。
目前能想到的除了去程序公司上班就是培训学校了,不过没有从业经验积累,感觉也够呛。
开车
我拿驾照时间挺久了,目前已经换过一次驾驶证,驾驶风格稳重,每年回家要独自开车10小时左右,所以长时间驾驶也没什么问题。
能干的有货拉拉、网约车、出租车、代驾、外卖等等。
电脑维修
水平够找个班上,不过工资估计够呛。
销售员
从事目前这个行业十多年了,虽然生意没做好,但是行业思维还在,销售能力也还凑合,最后实在不行去大连锁上班,每个月4k左右应该没问题,如果今年能把药师证拿到手就更好了,上6-7K应该也没问题。
想来想去,列举出以上稍微能落地的,好像也并不多。
剩下的都是一些曾经了解过,更偏兴趣向的,如带客爬山、户外活动组织、抖音运营、UP主等等等,但都太肤浅和不切实际。
#14 快乐玩雪的一月月报
新年的第一个月,万象更新,新的月报也开始了。本月除了忙于工作之外,元旦出去玩了一趟,月底去了东北,其他时间则是主要呆在家里。
博客
每月记录大约是从24年的6,7月写的,中间也断更过,到目前来也坚持了十几个月,每次都是几月月报,回头来也不好找,索性从本月开始也就给每一期加一个序号。本月就是第14期了,后面继续坚持,每月都督促自己更新一下,也算给自己一个交代。
折腾
去年11月把家里的路由器换掉了,原先家里的反向代理是部署在路由器上面的,新的小米路由器不支持,并且想着直接把反向代理放在NAS性能会更好,之前在家里没事,但是后来出去发现在外面访问不了。 一月份正好有时间,自己折腾了一段时间搞不定,就找了威联通的技术支持来解决,对方主要在帮忙设置威联通的防火墙和相关的设置上,但也没搞好。但是他引导我让我想明白了,我的NAS的网关设置的不是家里的路由器而是科学上网的旁路由,因此改回主路由就好了。之后,就通过在主路由上设置端口转发到旁路由,在旁路由上部署方向代理,再由旁路由代理访问NAS上的真是服务,这样便可以在外面自由的访问家里的服务了。
家里的滚筒洗衣机用了三四年了,最近声音特别大,媳妇查了下是减震杆不行了,但是已经过了保修期,请维修的可能要三四百,于是就想让我自己换。拖了好久,终于决定自己买了减震杆来换掉。原厂的是80N的减震杆,想着换个大一点的减震效果会不会更好,就买了四根120N的减震杆,总共花了不到40快钱。减震杆就在洗衣机底部,把洗衣机侧面放到就行了,但是减震杆固定的插销是真的不好拆,有的很紧拔不掉,有的那位置不好伸手进去,废了九牛二虎之力,学习了很多视频才搞定。我想着下次如果还要换,那就还是花点钱找专业的人来搞吧。
丈母娘之前用的手机是媳妇淘汰的小米10青春版,结果现在开机键音量键没反应了,拆开一看这个小板和主板连接的地方断掉了,而旁边还有一根不知道什么天线的线也断了,这个手机本身也是战损版了,就给他买了给vivo y300t,跟之前买的一个iQOO基本配置差不多。这个手机想着也不能浪费,就花了三块钱在淘宝买个按键买了个音量小板回来换上,我之前的anddroid thing开发版屏幕坏了,准备自己后面写写小应用,这个手机作为我的桌面摆件使用了。
另外想着马上要过年了,回老家没电视看,于是想着买个投影仪,这样平时在卧室能在床上看看电视,回老家也能带回去看看电视。选了一圈,决定要买个4k, 三激光的产品,最终买了坚果的N1S和Vidda M2Pro两个回来是用了一下,坚果的提及更小,Vidda的画质更好,最终还是决定留下了Vidda。
旅行
月初元旦三天假,于是决定花个两天时间出去玩一趟,看了游侠客的线路知道了茅山东方盐湖城,于是定了一个景区内的酒店,开车过去了。这是一个人工修建的景点,在茅山旁边,当天天气挺冷还下着小雪。景区内有不少的NPC可以与NPC互动赚取银票,但是排队比较长我们就赚了几张就放弃了。里面还有一些演出活动,但是有些需要定点定时预约,这个我们基本都错过了,而VIP票还有但是都需要额外付费了,算了算了。晚上的时候有火神游行和鱼灯游行,有点氛围但是和之前的宣传图比还是差点意思。
而这里最让人印象深刻的这是性博物馆,放几张照片在下面吧。
第二天,我们则是开启了暴走模式,去徒步茅山,从茅山森林公园出发,前半部分比较多的爬升和下降,爬了三茅峰二茅峰,山顶都有道观,最后是从茅山风景区的老子神像这里下到元符万宁宫出去,之后沿着柏油路走三四公里到达我们停车的地方。这条线人也蛮多的,老子像这里的景区是收费的但是我们是反方向过来的因此没有检票,我们专注于徒步,这里的各个殿也就没有进行参观了。
后面的周末,去了上海的西岸自然公园,公园旁边是宁国禅寺,听说包子很有名想去买,结果别人告诉我想买这里的素包子需要早上6点就过来排队,算了算了。宁国禅寺听着名字就很排气,虽然没有静安寺金碧辉煌但是这里各个殿,钟楼,藏书阁啥的都很齐全,不愧是上海寺庙,香火相当旺。
西岸自然公园,有几次挺大的儿童游乐设施,这也是我们来这里的原因,小孩是玩的挺开心。
公园里面还有个浸想小院,徽派建筑,还有绿水假山,喝个大碗茶也就10快钱,里面有戏曲演奏等表演,在这呆着也挺不错的。
另一个周末,趁着天气好,决定去挑战一下两年前未能走完的虞山雄鹰线,这次大人小孩一起终于走完了。这条线路是有当地文旅宣传的,一路上的补给是很充足的可以轻量出发,当然对于新手还是有点难度的。
临到月底,小孩学校的期末考试结束了,到正式放假还有一个多星期,于是决定还是去想去了几年的哈尔滨玩一玩。行程规划变了又变,最终是去了哈尔滨,亚布力和雪乡,这里先分享几张图,回头再详细写一下。
另外还拍了一些视频,也贴在这里啦。
更多哈尔滨的旅行记录,等我有空再更新。
看
这个月的主题是在路上,因此看书的时间很少。在外面玩基本很少看,在家的时候呢,晚上躺到床上刚看了没几页就睡着了。《苏东坡新传》这个月差不多看了也就三四百页(手机屏幕的三四百页😂)吧,现在只能立个Flag今年把它读完。
在哈尔滨的航班上倒是看了两部电影,《奇遇》和《地久天长》,前者是一个穿越喜剧,和18岁的自己互换身体,不同年纪的自己对另一个自己所处时空的态度和变化,这一切挺有趣的,可以从流媒体平台翻出来看看。
《地久天长》讲述的是80年代的一对夫妻,孩子跟好朋友的孩子一起游泳死亡,自己因为好朋友是计生办的去做了流产不能再生,收养的孩子叛逆,等等一系列的故事,这个剧就比较有时代特色,讲述了他们经历的痛苦,以及最终的和解。这个片子柏林电影节还获得了多个奖项,还是值得看一看的。
又是到了一年的开头吗,也想着立一立Flag,又想着重新学一下英语,于是花了几十块钱在流利说上报了个人机课,体验了两个星期。然后又被忽悠报了班,希望后面能坚持下去,欢迎监督,后面的月报继续更新进度。
总结
一月是玩雪的季节,是立Flag的季节,继续加油喽。
看完评论一下吧
在 Windows 本地安装使用 OpenClaw(原 clawdbot)教程
简介
OpenClaw 是一款基于 AI 的本地化助手工具,前身为 clawdbot。它可以帮助用户在本地环境中快速部署和使用大语言模型,支持多种国内外主流 AI 模型接入。
![]()
安装步骤
1. 安装 Node.js 22.x
首先需要安装 Node.js 运行环境。访问 Node.js 官网下载 22.x 版本的安装包,按照向导完成安装。
![]()
2. 安装 OpenClaw
打开命令行工具,执行以下命令进行全局安装:
npm install -g openclaw@latest![]()
3. 配置 OpenClaw
安装完成后需要进行初始化配置。
注意:以下操作需要在管理员权限的终端中运行
执行配置命令:
openclaw onboard --install-daemon![]()
3.1 选择启动模块
在配置过程中,选择"快速开始"模块,这样可以快速完成基础配置。
![]()
3.2 选择 AI 模型
这里选择通义千问(Qwen)模型,当然也可以根据需要选择其他国内外的大模型。
![]()
3.3 登录验证
选择通义千问的登录验证方式。
![]()
系统会自动打开浏览器进行登录验证,完成授权后即可继续。
![]()
3.4 选择默认模型
在可用的模型列表中选择一个作为默认使用的模型。
![]()
3.5 跳过高级配置
对于初次使用,可以暂时跳过 channel 的配置。
![]()
同样,skills 和 hooks 也可以暂时不配置,后续有需要再添加。
![]()
3.6 安装守护进程
选择 reinstall 来安装或重新安装守护进程。
![]()
4. 启动和使用
配置完成后,OpenClaw 会自动启动。
![]()
系统会自动在浏览器中打开 OpenClaw 的 Web 界面。
![]()
5. 验证安装
在聊天界面发送一条消息,如果收到 AI 的回复,就说明安装配置成功了。
![]()
总结
至此,OpenClaw 已经在 Windows 系统上成功部署。整个过程主要包括安装 Node.js 环境、全局安装 OpenClaw、配置模型和认证信息、安装守护进程等步骤。安装完成后就可以在本地使用各种 AI 大模型功能了。由于很消耗token,所以我还没有过多使用它的技能。
Windows装机必备软件清单
用Windows系统这些年,每次装机、重装系统,我都坚信好工具能让使用体验和效率翻倍,却也踩过不少坑:下载到带捆绑广告的软件、跟风安装后发现不契合需求、碰上占内存又操作繁琐的“鸡肋工具”。
久而久之,便攒下了这份自己装机时必装的软件清单,清单里的每一款,都是我精挑细选、长期日常实测后留下的,覆盖办公协作、文件管理、效率提升、系统优化等多个装机高频需求场景,没有难上手的冷门工具,全是能切实解决问题、融入工作生活的实用款。
这份装机清单不会盲目罗列,每款软件都会附上我的真实使用心得,讲清适配场景、核心优势,也会避坑提醒,同时整理好以官方链接为主、开源工具附仓库地址的安全无广告获取渠道,帮大家装机时少走弯路。
无论你是新电脑装机、给旧电脑重装系统,还是想优化电脑工具的Windows用户,这份我自用的装机必备清单,希望能给你实实在在的参考。当然,也欢迎友友们在评论区分享你的装机宝藏软件,好工具一起交流。
清单索引
![]()
1.微信
![]()
我们日常生活中使用最多最频繁的综合型即时通讯工具之一,支持文字、语音、视频实时沟通,可便捷传输文件、同步管理聊天记录,能进行朋友圈互动,集成丰富的小程序与公众号生态,还可实现轻量办公协作、生活服务办理等多元功能,适配日常社交、工作沟通等多种场景。
体验:9.5 分
官网
2.QQ
我们日常生活中使用最多最频繁的综合型即时通讯工具之一,支持文字、语音、视频多形式沟通,拥有强大的群聊管理、大文件高速传输、离线文件收发功能,集成QQ空间、邮箱、云文档等生态,兼具娱乐社交、办公协作、文件共享等多元能力,适配个人日常、群体互动、轻办公等多种场景。
体验:9.5 分
官网
3.火绒安全
火绒安全是轻量高效的终端安全软件,以自主反病毒引擎提供病毒/木马/流氓软件查杀与实时监控,支持多层主动防御(文件/注册表/进程/网络维度),可自定义防护规则。
核心功能含弹窗拦截、开机启动管理、浏览器主页保护、文件粉碎、系统修复、U盘实时防护、漏洞修复等,还具备软件安装拦截、网络入侵拦截、暴破攻击防护等能力。特点是安静无广告、低内存占用、无捆绑,适配个人日常防护与轻办公场景,同时提供企业版终端安全管理方案。
体验:8.9 分
官网
4.搜狗输入法
搜狗输入法是腾讯旗下跨平台智能中文输入工具,覆盖Windows、Mac、Android、iOS等系统,以海量词库+AI智能联想为核心优势,支持拼音、语音、手写、笔画、五笔、滑行、跨屏输入等多元方式,U模式输生僻字、V模式转大写数字等快捷操作提升效率,还能通过细胞词库自定义专业词汇,个人词库可云端同步,AI助手可实现边输入边搜索、AI帮写、智能纠错等功能。
同时提供数千款皮肤与自定义界面选项,适配日常聊天、办公写作与专业场景,软件基础功能免费,部分个性化皮肤或高级AI功能需付费,安装时注意取消捆绑组件,日常使用可关闭冗余推送,是兼顾高效与个性化的主流中文输入法选择。
体验:8.9 分
官网
5.WPS Office
WPS Office是金山办公推出的跨平台全能办公套件,涵盖文字、表格、演示、PDF四大核心功能,完美兼容微软Office格式,支持Windows、Mac、Linux及移动多端使用,具备轻量启动、云同步、多人实时协作的特点,还搭载WPS AI实现文档创作、数据分析、PDF问答等智能能力;基础功能完全免费,会员可解锁PDF高级编辑、超大云空间、AI增强等增值服务,同时拥有丰富的模板库与插件生态,能一站式满足个人日常办公、团队协同及企业定制化的办公需求。
备注:该获取方式为WPS 2023激活优化版,所有功能只需登录即可正常使用,无需另付费。
6.Geek
Geek Uninstaller是一款轻量便携的Windows专属卸载工具,仅约6MB单文件可免安装直接使用,无广告无捆绑,既支持调用官方程序完成常规软件卸载,还能自动深度扫描并清理卸载后残留的文件、文件夹与注册表项,针对顽固或损坏的程序可实现强制删除,同时支持清理系统组件、隐藏组件和Windows商店应用,也能进行多程序批量卸载,专业版还额外提供启动项管理、安装过程监控等增强功能,是清理电脑冗余软件、释放系统空间的实用工具。
7.Everything
Everything是VoidTools开发的Windows极速文件搜索工具,核心是基于文件名实时索引NTFS分区,输入关键词秒出结果,体积仅约1.7MB、单文件免安装、完全免费且无广告。
它会预建文件数据库并实时监控文件系统变化,支持布尔运算、通配符、正则表达式等高级搜索语法,可按名称/大小/修改时间排序,能直接在结果中重命名、打开或定位文件,还可自定义快捷键与资源管理器右键集成,适合快速定位本地文件,大幅提升办公效率。
8.IObitUnlocker
IObit Unlocker是Windows平台轻量免费的文件解锁工具,仅约4MB,适配Windows XP至11,专注解决“文件被占用无法删除/访问被拒绝”问题,通过温和释放文件句柄而非强制杀进程,降低数据丢失与系统崩溃风险,可精准枚举占用进程并展示PID与关联方式。
支持解锁、解锁并删除/重命名/移动/复制等操作,提供强制模式应对顽固锁定,支持拖放添加文件、右键菜单快速调用,安装时注意取消捆绑组件,日常用于清理卸载残留、删除被占用文件、处理共享冲突等场景,操作前建议备份重要数据,避免误删关键文件。
备注:文件强制解锁工具,将无法正常删除的文件/文件夹/应用程序拖到里面,即可一键解锁(解锁后,就可以轻松删除或者操作了)
体验:9 分
立即获取 提取码:34ip
9.Wise Force Deleter
Wise Force Deleter是WiseCleaner推出的Windows免费文件解锁删除工具,约4.44MB,适配Windows XP至11(32/64位),专注解决“文件被占用/拒绝访问/共享冲突”等删除难题。它通过终止占用进程、解除访问限制来解锁删除,支持右键菜单“Force Delete”快速调用与拖放添加文件,也可批量处理,v1.5.7新增命令行删除能力,操作无需重启,界面简洁易上手。适用于清理卸载残留、删除顽固文件、处理共享冲突等场景,完全免费无功能限制,安装时注意取消捆绑组件,删除前建议备份重要数据,避免误删关键文件。
备注:文件强制删除工具,将删不掉的文件或文件夹拖到里面,即可一键删除
体验:8.9 分
立即获取 提取码:eoya
10.WindowsUpdateBlocker
Windows Update Blocker(WUB)是Sordum.org开发的免费绿色便携Windows自动更新管理工具,体积仅约300KB,适配Windows 7至11的32/64位系统,无需安装,只需以管理员身份运行即可操作,还支持简体中文界面,可在Menu的Languages中快速切换,操作直观易懂。
该工具能一键禁用或启用Windows自动更新,直接控制wuauserv、WaaSMedicSvc等核心更新相关服务,设置后立即生效,还可勾选“保护服务设置”,通过修改注册表权限与组策略,防止系统或其他程序自动恢复更新设置,满足稳定禁用的需求,同时支持编辑wub.ini配置文件,自定义添加最多25个额外服务进行屏蔽,适配各类特殊使用需求,工具全程不写入注册表、不安装后台服务,删除后无任何残留,是管理Windows自动更新、避免系统自动更新打断使用的实用工具。
备注:Windows系统一键禁止更新工具,很轻量的一款小工具,打开即可一键禁止Windows系统自动更新
体验:8.7 分
立即获取 提取码:a90l
11.AnyTXT Searcher
AnyTXT Searcher是免费的Windows本地全文搜索工具,主打文档内容检索而非仅文件名搜索,体积轻量(约10MB),支持100+种文件格式(Office/WPS/PDF/代码/电子书等),自建索引确保秒级出结果,可对搜索结果预览、复制文本、打开路径并支持精准/模糊/正则等高级搜索语法。
基础版提供文档全文搜索,增强版额外支持图片与扫描PDF的离线OCR文字识别搜索,还有结果内二次筛选、文本翻译等附加功能,纯中文界面无广告,适合忘记文件名只记得内容、查找代码片段或检索图片/扫描件中文字的场景,常与文件名搜索工具Everything搭配使用提升查找效率。
体验:8.2 分
官网
12.VMware虚拟机
![]()
VMware虚拟机是VMware推出的主流虚拟化工具,能在单台物理机上虚拟出独立的计算机环境,实现多系统隔离运行,个人端常用Workstation系列、macOS端为Fusion,支持快照、文件共享、多模式虚拟网络等功能,适配开发测试、系统体验、安全沙箱等场景,企业端则有vSphere等方案支撑大规模虚拟化部署。
备注:该方法中包含了VMware17pro安装包和对应的激活码,打开即用,以及VMware虚拟机清理工具,做到打开即用,用完即删,安全、干净、无残留。
体验:8.7 分
立即获取 提取码:6slc
13.IDM
Internet Download Manager(IDM)是Windows平台经典多线程下载管理器,核心靠智能动态文件分割(最多32线程)将下载速度提升至约5倍,充分利用带宽。
它支持HTTP/HTTPS/FTP/MMS协议,自带断点续传与自动重试,网络中断后可无缝恢复,不浪费流量。主流浏览器(Chrome/Edge/Firefox等)可无缝集成插件,自动捕获下载链接并嗅探网页音视频,轻松抓取原画质资源。还具备批量下载、站点抓取、队列计划、速度限制、文件分类管理等功能,个人版付费(试用期30天),适合高频下载、追求速度与管理效率的场景,常与网盘工具搭配使用。
备注:该方法中获取到的IDM软件为IDM浏览器通用插件6.38.11版本,下载后打开浏览器拓展,添加即用,无需另外付费,安全高效(如果软件提示升级,请勿升级,保持该版本即可,升级后可能需要重新收费,或部分功能可能受限制)。
14.NDM
NDM(Neat Download Manager)是免费轻量的多线程下载管理器,主打HTTP/HTTPS/FTP下载、断点续传与网页音视频嗅探,被称为IDM的免费平替,支持Windows与macOS,安装包仅约1.4MB、免安装、无广告无捆绑。
它最多支持32线程并行下载,可智能调整分段策略,能设置全局或单任务速度限制,支持队列管理、批量下载与导入URL列表,还可通过插件集成Chrome/Edge/Firefox/Safari等主流浏览器,自动捕获网页媒体资源,部分平台能选分辨率一键下载,不过对加密或DRM保护内容可能无法抓取。
其界面简洁、操作逻辑接近IDM,常用功能齐全,无需注册即可使用,原生为英文界面,第三方汉化版可能有安全风险,且不支持BT/磁力链接,稳定性与功能细节略逊于IDM,部分视频资源可能需手动合成音视频。适合追求免费、核心下载功能且能接受英文界面的用户,若需磁力下载可搭配FDM等工具使用。
体验:8.1 分
官网
15.Bandizip
Bandizip是Windows平台一款轻量高速的压缩解压工具,免费版无广告无捆绑,安装卸载干净,适配Windows 7至11含ARM64版本,支持解压ZIP、RAR、7Z、ISO等40余种格式,压缩则支持ZIP、7Z、TAR等格式,可处理4GB以上大文件和分卷压缩包,搭载多核加速技术让压缩效率提升约6倍,解压速度也表现优异且内存占用低,还具备AES-256加密、智能解压(自动创建同名文件夹避免桌面杂乱)、压缩包修复、Unicode文件名支持等实用功能。
同时深度集成资源管理器右键,操作便捷,分为免费基础版和付费专业版,免费版仅支持RAR格式解压不支持压缩,专业版可解锁批量格式转换、高级压缩包修复等更多功能,是日常高效管理压缩包的优选工具。
体验:9 分
官网
16.7-zip
![]()
7-Zip是一款完全免费开源的跨平台压缩解压工具,适配Windows、Linux、macOS等系统,以高压缩比的7Z格式为核心优势,支持解压ZIP、RAR、ISO、GZIP等几乎所有主流压缩格式,也可压缩为7Z、ZIP、TAR等格式,能处理分卷压缩、大文件压缩,还具备AES-256加密、文件批量操作、压缩包校验、资源管理器右键集成等实用功能。
软件体积轻量、无广告无捆绑、内存占用极低,操作界面偏简洁原生,虽部分高级功能需手动设置,且默认不支持部分格式的拖拽解压,但胜在开源免费、功能硬核,兼顾日常使用与专业压缩需求,是电脑装机必备的经典压缩工具。
体验:8.9 分
官网
17.PotPlayer
PotPlayer是Windows平台免费无广告的全能多媒体播放器,由KMPlayer原开发者打造,内置全面解码器,无需额外安装即可流畅播放MKV/MP4/AVI等几乎所有音视频格式,包括4K/HDR/杜比视界等高规格内容,适配DXVA/CUDA/QuickSync硬件加速,多核解码加持,资源占用低且播放流畅。
它支持SMI/SRT/ASS等多种字幕格式,可自动匹配下载字幕、微调同步与自定义样式,还能通过插件实现实时字幕翻译,同时具备倍速播放、AB循环、书签记忆、进度条预览、画面截图录屏、声画同步调节等实用功能,界面简洁且高度可自定义,支持自定义皮肤、快捷键与渲染器设置,安装包仅约30MB,兼容Windows全版本32/64位,无捆绑无广告,是本地播放与轻度直播观看的优选工具,不过部分高级功能需手动配置,新手可能需短暂适应设置逻辑。
体验:8.9 分
官网
18.LocalSend
LocalSend是免费开源跨平台的局域网文件传输工具,像跨平台版Airdrop,无需公网、无广告无跟踪无账号,靠局域网WiFi/热点实现Windows、macOS、Linux、Android、iOS间点对点直传,支持文件与文本传输,所有传输用HTTPS加密且可设PIN验证,设备能自动发现,传输速度达WiFi上限且无文件大小/格式限制。
默认存下载文件夹可自定义路径,还支持批量发送、快速保存(自动接收)、自定义设备别名等功能,安装即用无需复杂配置,是多设备间高效安全互传的优选,不过仅能在同一局域网内使用,无公网传输能力,部分复杂网络环境可能需要手动配置端口或关闭防火墙干扰。
体验:8.6 分
官网
19.LANDrop
LANDrop是免费开源的跨平台局域网文件传输工具,像跨平台版Airdrop,无需公网、账号与流量,靠同一WiFi或热点即可实现Windows、macOS、Linux、Android、iOS间点对点直传,传输速度达局域网上限且无文件大小/格式限制,支持文件、文件夹与文本无损传输,采用先进加密算法保障安全。
设备可自动发现,界面直观易操作,能自定义设备别名与是否可被发现,iOS端接收的照片视频会自动存相册,文件可在文件应用访问,安装即用无捆绑无广告,不过仅能在同一局域网内使用,无公网传输能力,部分复杂网络环境可能需要手动配置端口或关闭防火墙干扰,是多设备间高效安全互传的优质选择。
体验:8.2 分
官网
20.EmEditor
![]()
EmEditor是Windows平台轻量高效的商业文本编辑器,兼顾日常编辑与专业大文件处理,启动迅速、无广告,支持32/64位系统且64位版针对SSE2/AVX - 2/AVX - 512指令集优化,它以流畅打开248GB超大文件、处理超20亿行文本为核心优势,采用磁盘缓存机制避免内存过载。
还全面支持Unicode编码,对中文及多语言适配出色,内置丰富语法高亮、正则表达式查找替换、列选择编辑、文件比较、CSV编辑与批量处理等功能,支持插件扩展、宏录制与脚本自动化,可自定义菜单、工具栏、快捷键与界面主题,同时具备无限撤销/重做、自动保存、备份、HTML预览等实用功能。
软件有免费试用版,试用期结束后可降级为免费版(仍保留大文件处理、正则等核心功能),付费版解锁AI辅助写作、高级插件等更多特性,虽为商业软件但免费版足以满足多数用户需求,是程序员、数据分析师及办公用户处理各类文本与超大文件的优质选择,不过仅适配Windows系统,且部分高级功能需手动配置,新手需短暂适应操作逻辑。
体验:8.2 分
官网
21.ViewTurbo
ViewTurbo是新加坡 VIEWTURBO PTE LTD 开发的跨平台网络代理工具,主打安全隐私与高速稳定,覆盖全平台: Windows 、 macOS 、 Linux 、 Android 、 iOS 及软路由,支持 HTTP / HTTPS / SOCKS5 协议与 IPv6 ,采用 ChaCha20 加密,提供10Gbps高速节点与20000M专属带宽,可满足8K视频、游戏加速等低延迟需求。
支持最多10台设备同时连接,注册用户有免费流量,也有按时长/按流量的付费套餐可选,iOS端经优化解决常见OOM问题,还具备网络监控、智能分流、AI优化网络体验等功能,适合日常上网、开发代理配置与多设备网络安全管理场景,使用前需注意遵守当地网络使用规定。注册用户每天可签到领取100到500MB流量,算是永久白嫖方案。
备注:该软件为全平台网络加速器,打开获取链接后,首次注册即可免费获得1到10G流量,注册用户每天可签到领取100到500MB流量,算是永久白嫖方案。
体验:9.1 分
立即获取
22.硬件狗狗
一款专业电脑硬件检测与性能测试工具,主打 “精准检测、纯净无广告、功能全面”,适配Windows系统(支持 Win10/Win11),既能满足普通用户的硬件信息查询、健康监控需求,也能为DIY玩家、数码评测人员提供专业的性能跑分、硬件对比功能,是替代鲁大师、补充 AIDA64 的轻量化硬件管理工具。
体验:7.6 分
官网
23.图吧工具箱
图吧工具箱是一款免费开源、绿色免安装的Windows电脑硬件检测与系统维护综合工具集,适配Windows XP至Windows 11全版本系统,一站式集成85+款业界权威工具,涵盖硬件信息采集、性能基准测试、压力测试、故障诊断、显卡超频、硬盘健康检测等硬件相关功能。
同时也提供驱动管理、磁盘空间整理、数据恢复、系统优化、外设检测等系统维护能力,所有工具可一键启动,操作便捷,全程无广告无插件无恶意代码,数据检测专业准确,且会持续更新以兼容最新硬件和系统,是电脑装机、硬件检测、故障排查与日常系统维护的实用工具。
体验:7.6 分
官网
24.傲梅分区助手
![]()
傲梅分区助手是Windows平台易用的无损磁盘分区管理工具,适配Windows XP至11及主流服务器系统,以无损调整分区为核心,支持创建、调整、合并、拆分、复制分区与磁盘克隆,能迁移系统到SSD、转换MBR/GPT与动态/基本磁盘、NTFS/FAT32互转,还可制作WinToGo、安全擦除数据、检测磁盘健康、SSD 4K对齐,操作采用虚拟预览机制,先提交再执行,大幅降低误操作风险,界面直观,拖动滑块即可调整分区,新手也能快速上手。
软件分免费版、专业版与技术员版,免费版满足多数个人用户基础需求,专业版解锁动态磁盘管理、命令行脚本等高级功能,技术员版适合批量部署与维护场景,是解决系统盘扩容、磁盘空间优化、系统迁移等问题的可靠选择,不过部分复杂操作(如跨磁盘调整分区)可能需要重启进入PE环境执行,且高级功能需付费解锁,部分操作前建议先备份重要数据以防意外。
体验:7.8 分
官网
25.DiskGenius
![]()
DiskGenius是Windows平台集磁盘管理、数据恢复、备份还原于一体的专业工具,适配各类硬盘、U盘、移动硬盘与存储卡,兼容MBR/GPT分区表及FAT12-32、NTFS、EXT2-4等主流文件系统,也支持动态磁盘与虚拟硬盘。它核心优势是强大的数据恢复能力,能恢复误删/格式化/分区丢失的文件,支持加密分区、RAID与扇区级编辑,还可检测修复硬盘坏道、检查修复分区表错误。
分区管理方面,可无损调整分区大小、合并/拆分分区、快速分区、整数分区,也能实现系统迁移、磁盘/分区克隆与增量备份。软件提供免费版、标准版与专业版,免费版满足日常分区管理与基础数据恢复,专业版解锁加密恢复、RAID恢复、热备份等高级功能,常被用于PE环境下的磁盘维护与数据救援,操作前建议备份重要数据,复杂分区调整可能需重启进入PE执行。
体验:7.8 分
官网
26.USBSafelyRemove
![]()
USBSafelyRemove是Windows平台专业的USB设备管理工具,可替代系统自带安全删除功能,专门解决设备占用难弹出、盘符混乱等问题,适配Windows 7/8.1/10/11系统,支持USB、SATA、FireWire、PCMCIA等各类热插拔设备,特别适合频繁插拔U盘、移动硬盘、读卡器的用户。
该工具支持自定义设备名称与图标,可一键停止所有设备、通过Win+S快捷键快速调用,设备误停也能一键恢复,移除设备时会显示占用进程并支持强制停止,停止后还能对设备进行断电保护,大幅降低数据丢失风险;同时支持固定设备盘符、隐藏读卡器空卡槽盘符、禁止特定盘符分配,让资源管理器更整洁,还配备usr.exe命令行工具可集成至脚本,能设置设备插拔时自动执行备份、杀毒等自动化任务,功能全面且操作便捷,是优化Windows端USB设备使用体验的实用工具。
备注:USB安全移除工具,解压该工具,无需安装,打开USBSafelyRemove.exe即可使用,如果软件提示让你注册安装或升级,不用理会它(这个版本也可以正常使用)
声音的觉醒(六)如何判断自己属于低音、中音还是高音?
声音的觉醒(六)如何判断自己属于低音、中音还是高音? 无敌的个人博客 tangwudi
1 在谈低音、中音和高音之前 相信不少音乐爱好者,都认真思考过这样一个问题:自己的声音,到底算低音、中音,还是高音。这个问题看起来并不复杂,甚至似乎可以通过一个简单的音域测试就得到答案:最高能唱到哪里,最低能下到哪里,把这些音名一列出来,结论仿佛就已经呼之欲出了。 但真正开始查资料、看讨论之后,很多人反而会变得更加困惑:同样是“低音、中音、高音”这样的说法,在不同文章、视频和讨论中,却对应着完全不同的判断标准。有的强调最高音,有的关注最低音,也有人指出音色、共鸣位置甚至发声方式才是关键——结果就是,原本试图给自己一个清晰定位的过程,逐渐演变成一种持续的自我怀疑。 这种混乱并不完全源于信息错误,而更多是因为讨论的前提本身并不统一,很多时候,人们在使用同一组词汇,却在讨论不同语境下的问题:有的人谈的是美声体系中的声部划分,有的人讨论的是流行演唱中的高音难度,还有的人只是想弄清楚自己唱歌时的实际 […]
<p>The post 声音的觉醒(六)如何判断自己属于低音、中音还是高音? first appeared on 无敌的个人博客.</p>
诚邀评论,聊聊你所知欲知的我
如要阅读全文,点击标题跳转。2025年的年终总结我还没写,这是一篇突发奇想准备发布的一段内容,我希望所有路过此处的读者,留下你理解的我是什么样,或者你有什么想了解的,有什么想问的,都非常欢迎在评论区打出来。我准备把这些内容,作为年终总结的一个版块儿,与大家进行一次交流。你可能是看了我博客几年的老读者,可能是只看了三四篇的新读者,不管怎样,都非常欢迎留下你的评论,想对我说的话也可以,等着大家的留言。
学习周刊-总第248期-2026年第05周
如要阅读全文,点击标题跳转。 学习周刊-总第248期 | pure-genealogy | openscreen | easydb_app | kubeaver | IReader | dockerman.app | serve | eechat | DeepAudit
