MoreRSS

site iconW4J1e | 瓦解修改

早稻田大学 → 伯克利大学 → 重庆。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

W4J1e | 瓦解的 RSS 预览

不太完美但值得的扫地机器人:Mova P50

2025-05-24 22:30:00

前言

在去年下旬的时候我就想买一台扫地机器人了,贺某听了我的想法后,因为他家请了阿姨做清洁,就很大方的把他买来吃灰的追觅 s10 拿给我体验,让我体验后再决定买不买。

独居的我并没有太多生活垃圾,地板上更多的是对面施工带来的灰尘。而我的工作越来越忙,周末只想躺平睡大觉,所以我这样的懒人真的很需要一台扫地机器人。贺某开玩笑跟我说,1800 把那台二手扫地机器人卖给我,考虑到这个价格可以买台全新并且升配的扫地机,我便真的开始琢磨买新机了。

对比

我预算大约1800。由于追觅 s10 可以接入米家,动动嘴就能让小爱同学派它去做清洁,于是对比之初,我很大比重上考虑来了要不要买小米的扫地机器人。但后来我不再执着追求米家生态,更何况杨傻跟我说,米家扫地机器人是追觅代工的,米家的这一代即是追觅的上一代。后来他给我推荐了追觅的子品牌 Mova,相对追觅来说性价比更高,于是我的购物车里就出现了好几款扫地机器人。

小米H40 小米M30s 追觅S30铂金版 Mova P50甄选
最大吸力 6000Pa 7300Pa 11000Pa 19000Pa
边角清洁 扭扭擦 机械臂 机械臂 双机械臂
割毛主刷
基站自清洁
实时视频
语音助手 小爱同学 小爱同学 自带 小度和自带
国补价格 1486 1826 1700 2299
其它备注 抖音专供版 不自带割毛主刷

以上表格对比了部分不同数据,有部分是我比较看重的,比如“机械臂”,即在边角处,边刷和拖布可以伸展出去清洁,无疑比反复扭动的款式清洁更彻底。此外,另一种更高级的滚筒拖布基本用在更贵的旗舰机上,所以没考虑。

其中,小米的两款相对比较老了,追觅S30铂金版虽然之前是抖音专供,我没选择它的原因是去年双12价格只要1500。最终我选择了 Mova P50甄选,国补386.77,Plus 立减10.56,以旧换新补贴50(换的是一个不值钱的桌面加湿器),实付2191.67。5月16日下单返300元 E 卡(虽然是收货一个月后返),相当于到手1891.67。

使用体验

建图

开箱安装后,充了一半多的电我便让它去建图了。建图效率还是比较高,区域识别也比较准确,但是我的厨房和两个卫生间有对它而言比较高的坎,所以只能我手动帮助它建图。

因为主卧目前闲置,堆放了一些杂物,所以主卧建图不完整;其中一个卫生间做了干湿分离,它更爬不过那个坎,所以建图也不完整。考虑到我需要全自动化(除了接水倒水)使用它,所以我给厨房和卫生间添加了虚拟墙,以免它下去做清洁后上不来。

今天我卖掉了主卧堆放的杂物,它在主卧识别出了腾出来的区域,但地图上并未和主卧合并,也无法手动操作,更不能单独房间重新建图。而此前通过实时视频操控它去待建图区域(未在清洁时)它是会自动新增建图的。

主卧里一片灰色的部分

此外,家具识别除了衣柜(要手动添加),沙发、床、茶几、床头柜和餐桌椅等家具它都能正确识别。

扫拖

到货刚好一周,我让它扫拖了全屋两次。第一次是在傍晚,它有自动照明灯,所以天黑以后基本就开着前照灯在房间里跑来跑去,第二次扫拖则是在白天。

开启前照灯清洁,边角有清洁不彻底的地方

和追觅 s10 一样,它的扫拖逻辑也是先四周,然后在中间反复来往进行清洁,但从用时来看,扫拖效率比 s10 更高一点。

然而今天我发现了一个暂时无法直接解决的问题。主卧空余出来的区域它会清洁,但离空余区域墙面大约 50 厘米的地方它则没有清洁,反复尝试了好几次,在客服的建议下临时使用“加扫”功能指定它去完成了。

手动指定清洁区域

加扫区域和我狭长的阳台一样,它通过反复清洁这种更加细致的方式进行。但是依然可以看到有个别遗漏的部分:

它在这里调头,然后遗漏了一点区域,边角的清洁也有不彻底的地方

加扫完成后,可以看到加扫的轨迹不一样

整体来说,它的清洁完成度还不错,不算虚拟墙隔开的厨房和卫生间,它清理过的地方基本不用我再去二次清洁,并且人工很难清洁的床底和沙发底也可以交给它,基本上可以省下扫地和拖地的时间了。

语音

和追觅一样,Mova 也有自带的语音,并且还有个所谓的“Mova GPT”,即宣传在千帆大模型的加持下,可以更好地理解用户所说的话。但是实测,用语音控制它进行基本的操作外,它还是很蠢的。

看起来确实有点呆呆的

比如我说:我觉得你要回去洗一下拖布然后重新清理一下主卧。它的应答是:好的,工作开始啦,请确认房间门已打开。事实上它根本不会回去重洗拖布——在 APP 上可以点击让它回洗拖布。

我问:为什么主卧的边缘你不扫呢?它应答:好的,我将不会去清洁主卧。我再问一次,它又回答:好的,进入自定义模式,准备去主卧扫地一次,请确认房间门已打开。

不过,它的应答速度还是很快,并且你说话的时候,它会转向你所在的位置。

基站自清洁

此前使用追觅 s10,几乎每次清洁后都要手动去清理基站底部洗拖布后留下的脏污,并且它在回到基站时会在坡道延长垫上和旁边留下一些灰尘。但是使用 mova 清洁两次后,基站和基站边缘依然比较干净,几乎不用自己额外去清理给它善后。

清洁结束回到基站,基站比较干净

其它

由于不能接入米家,所以要使用它的 app——Movahome;它的避障能力还将就,在墙边基本不会碰到墙壁,在桌角边缘会伸出机械臂清洁,也不太会发生碰撞;在 app 上添加了窗帘后,清洁临近窗帘的地方时它也不会像追觅 s10 一样保守;在清洁地毯时,我设置了不带拖布,所以它在地毯上会加大吸力进行吸尘。

在阳台的扫拖要比其它区域更细致

对了,收货七天后可以联系客服,他们赠送6个拖布,2个尘袋,2个滤网,2个边刷,4个主刷,1额割毛滚刷。

写在最后

今天偶然看到狗东的商品页写着,晚上八点到手价 16xx,其实就是1699,而商品不是采用降价,也不是赠送优惠券的方式,所以直接点击报价并不能成功。

我联系客服,表示我要新买一台,想参与秒杀活动,客服后来应该是临时改价到 1999了,叠加国补就是 1699元,看起来不是针对主动联系的用户改价,因为杨傻的结算页面就是1999。客服告知我可以了(价格改了),我点击申请保价又返了我540左右,相当于到手 1651 (有50的以旧换新补贴),后来价格很快就恢复到 2699了。

本以为要找客服拉扯很久,没想到报价还算比较顺利。这个价格买到这款机器,我觉得还是比较划算,除了电动窗帘,我想,扫地机器人应该就是可以真实给生活带来幸福感的另一个物品了。

没能走进心里的桃花源

2025-05-02 23:33:00

去年五一的记忆在今年五一的时候突然被唤醒,只不过今年没有人能与我同行,我一时间也不知道该去哪里。

本来临时打算去桂林,俗话说“桂林山水甲天下”,牛马是属于自然的。然而因为票的问题,我又觉得有些匆忙,并且把五一假期整得支离破碎,遂弃之。但按不住心中想要出去走走的念头,于是搜索了附近区县。

得知我要去酉阳桃花源,贺某打破说“不好玩”,kevin 拍过龚滩古镇但没去桃花源,跟我说桃花源可能不是它喜欢的类型。但我还是把心一横,下定决心要出去挥霍,享受生活!

今天早上九点多出发,驱车两百多公里,到达桃花源景区时已是中午十二点有余。停好车,被告知要买接运车票,遂花了十块钱坐上了大巴。没多大一会就到达了酉州古城外,怪我没做攻略,其实可以自己把车开到这里来停。

酉州古城外

顶着骄阳,懒得等免费观光车,随着人群步行进入酉州古城。跟去年去乐山苏稽古镇一样,大概全中国所有的古城都只是另一种形式的商业街。一路上来来往往的游客中,也有一些着苗族服饰的姑娘,踏着石板路,头上的装饰叮当作响。

这应该是苗族的吊脚楼?

快速走完酉州古城,终于来到桃花源的检票处。一进入桃花源,就觉得有一股幽幽凉意袭来。青山碧水,茅草瓦屋,林尽水源,便得一山。虽然时不时能见到公告牌上引用着陶渊明的文字,但以文造景,很多地方并不相匹配。步入小口,并不像陶渊明所写“初极狭,才通人”,实际宽敞得多。路上有景点运营方安排的“免费照相”,挤过排队的人群,看见了迷你版的“良田、美池、桑竹之属”,没有平旷的土地,也没有俨然的屋舍。

桃花源大门

绿水瓦屋

复行数十步,豁然开朗

潭中鱼可百许头

碧水岸边,有人垂钓

我以为 AI 力推的太古洞在山口之上,登上去后才发现是石室藏书(没看到书)。原路返回,再顺着道路往前走,终于看到了各种亭、院,虽有历史文化加持,但游客们往来匆匆,志愿者低头玩手机,并未能感受到秦晋风俗,也没产生“今是何世”的感慨。

一路上络绎不绝的游客

悠闲的水鸭

继续上行,爬过狭长的石梯,终于到了太古洞口。初进洞,一股股凉风拂面而来,午后的炎热被拂去了许多。走进洞内,五光十色,有些地方能看到成群结队的石钟乳,大多数地方则是嶙峋的“怪石”,确实给我少许的新鲜之感。但约三千米的洞内,多走一步也只是多一次见到重复的景致,若为乘凉,洞内确实为一个好去处,若想看到更多奇观,恐怕会令你失望。

太古洞中怪石嶙峋

被五颜六色的石钟乳

实不相瞒,洞内也适合小情侣约会徒步,昏暗的灯光,狭长的走廊,凉爽的空气,两人手牵手或者肩并肩走一走也是很不错的。可这却苦了我这种想要尽快走出去的单身狗,于是只得鼓起勇气说一句“你好,借过一下”。

太古洞中五光十色

澄澈的水中倒影

距离终点500米左右,又一阵凉风吹袭,却没有了最开始的那种惬意,此时只有饥饿和疲惫的感觉。两旁有一些展示酉阳风光或商业宣传的灯箱,因为我没做攻略,也不知道画中的美景位于何处。走出太古洞,发现游客集散中心和停车场都在附近,难怪工作人员说回程不用再次买票。

坐在车里的时候已是下午四点,我又开始纠结要不要退掉订好的住宿。不退吧,好像确实没什么好玩的地方;退吧,又觉得百里迢迢赶来只看了一个与我心中的桃花源相去甚远的景点不甘心。犹豫再三,或许及时止损才是更好的选择。在转盘处,我没有选择开往酉阳县城,而是转头上了高速。

一路上又觉得不甘,打算看看顺路的风景,比如去年单位团建我没去的濯水古镇。改变导航目的地,下高速进入濯水古镇时,感觉水上长廊确有一番风味。可惜车满为患,我只能一直开一直开,在309过道上飞驰了一会,才发现濯水也已离我远去,一路上成荫的绿树也不足给我以安慰——那就回去罢!

只存在于导航地图中的晚霞

在黑溪服务区看到平常四元一碗的素小面居然能卖15元,吃着十元一碗的凉面时,我好像突然又释怀了。此行我大多数时间都在车上,飞驰在无聊的高速公路。酉阳曾经打过的广告说:世界上只有两个桃花源,一个在重庆酉阳,一个在您心中。或许我心中没有真正的理想国,所以即使到了桃花源,也不知道它在我心中应该是什么样子。

但是走这一趟,见大千世界,见芸芸众生,或许已经足够了。

自托管 Bitwarden

2025-04-17 23:20:00

起因

使用浏览器保存密码,是我十年以来从使用傲游浏览器开始的习惯。得益于导出和导入的便捷,我换过很多浏览器,这些密码依然被完整的迁移到了我现在使用的 edge 浏览器上,且 edge 安卓版也支持作为密码管理器给应用填充密码,至此我都没有更换密码管理器的想法。

前阵子有博主给我推荐了 keepass,加上浏览器保存的四百多个密码中绝大多数使用的同一个密码,一旦泄露一个,被撞库的后果不堪设想,于是我有了更换密码管理器,且使用这玩意生成复杂密码的念头。

但是阴差阳错,keepass 太丑,我的服务器又可以一键部署 bitwarden,所以我最终选择了后者。

使用官方服务

一开始我并不是很愿意自己托管数据,一方面是 bitwarden 的官方服务够用,且一定程度够安全,自托管可能会面临更多的维护和容灾时间成本,所以我注册了官方的账户。

登陆后,我从 edge 导出了保存的密码——虽然需要输入系统密码,但是如柚子所言,浏览器保存的数据是很容易被导出或窃取的。导出完毕,我便删掉了浏览器保存的密码数据,决心使用 bitwarden 一条路走到黑。

起先体验还不错,但是没多久我就遇到了一个问题。在单位电脑上为某网站创建的账户使用了 bitwarden 生成的复杂密码,并且保存在了该应用中。而在家中的电脑上想自动填充时,却发现浏览器插件提示没有填充项目,即使我在本地一再点了同步密码库。

此时我意识到很可能是在单位时,该账户密码并未成功被同步到 bitwarden 的云端。

因此,我决心自部署该项目。

自部署和托管

在 1panel 中一键部署 bitwarden 是非常轻松的一件事,让我踩坑的点在于后续的配置中。

根据官方文档和碎月的建议,我决定使用域名的子目录来反向代理该服务,一定程度上减少它被恶意扫描和爆破的风险。理论上使用子目录反代很简单,只需要添加一条环境变量,在反代中添加该路径即可。

我的蠢问题

但问题来了:1.环境变量没有生效,2.反代只支持添加域名但不能包含路径。

针对问题2,我和碎月进行了较长的辩(嘴)论(硬)。我认为,一个域名都已经解析到目录 A 了,难道还能反代到目录 B 吗?

即,example.com对应网站的目录是 /opt/www/sites/,bitwarden 安装的路径是 opt/docker/bitwarden/,那么example.com/bit/是无法解析到后者的。还好碎月有耐心,让我明白了只需要在已解析域名的反向代理中添加前端请求路径和后端代理地址即可。

如图所示添加路径和带端口的地址即可

问题2解决了,问题1困扰了我好久。我添加的三个环境变量如下:

# 指定域名和子目录
DOMAIN=https://example.com/bit
# 禁用注册
SIGNUPS_ALLOWED=false
# 禁用邀请
INVITATIONS_ALLOWED=false

我首先在该服务目录下的 .env 中写入环境变量,重启服务,没生效;

docker-compose.yml 中硬写变量再重启,也没生效,碎月也不知道何故,为此,我还去 1panel 的项目中提了一个 issue (丢脸)。1panel 官方工作人员回复了我,并确认该情况不是 bug。在我多次尝试后发现了问题所在:修改 docker-compose.yml后我没有点重建!!!

不爱使用 docker 的我,最终为自己的无知感到了羞愧。

避坑

由于在应用商店更新应用会导致非持久化目录下的文件丢失(或覆写),所以我一直在考虑把 .env 添加到持久化目录中,在 docker-compose.yml里指定路径,还是把环境变量硬写在 docker-compose.yml里,最终我选择了后者。

为此,我和 deepseek 之间也有一段小小的插曲,因为允许它说脏话,所以我被它骂了,虽然后来它服软——因为我的环境变量里并不包含重要的敏感信息。

deepseek认为不应把变量写在yml

因为升级时可以勾选自定义docker-compose.yml,所以把环境变量写在这里要方便得多。

备份

虽然服务器已经稳定运行好几年了,我时不时会添加快照,但把鸡蛋放在同一个篮子里并非明智之举,所以我通过 1panle 的定时任务每天都会把 bitwarden 的数据同步到 onedrive 中,以免哪天需要恢复。如果你也选择自托管,我强烈建议使用脚本每天备份数据!

bitwarden数据备份到onedrive

体验

自部署的服务无论是增删还是同步都超级方便快捷,除了保存网站或应用的登陆密码之外,我终于把此前明文写在 onenote 中的银行登录密码给迁移到了 bitwarden 的“备注”功能之中。

但是体验也有不那么好的点,在安卓端或浏览器插件中无法批量管理密码(可能是出于安全),只能在服务端的网页上批量操作。此外,在安卓端的自动填充有时会有延迟,比如在浏览器中点好几次都不会及时显示自动填充,在 APP 上创建密码也不会及时弹窗询问是否保存。但大体上使用没什么问题。

写在最后

自托管 bitwarden 让我尝到了甜头,于是最近这些天我在折腾另一件让我苦恼的事,甚至今天水这一篇文也是为了后面的记录做铺垫。

最近我的 onenote 频繁闪退(其实也不算闪退,有退出动画那样时不时自动关闭)。为此,我决定找一个平替,期间尝试了包括但不限于知名的 notion、obsidian、joplin,以及 google play 上的很多如 notesnook、anytype、standard notes、appflowy、silentnotes等等几十款笔记应用,没有一个近乎完美符合我的需求。

需求如下:免费或者开源,非国产,多端同步,支持自托管或加密同步到如 onedrive 或 webdav,支持单篇笔记加密,界面好看不臃肿,支持剪藏更好。下一篇再来详细谈谈我的简单评测。

孤独的杰永远长不大

2025-04-06 21:00:00

见我走进来,杰仿佛被定格了一般,右手攥着白毛巾,左手握着酒杯,愣了好一会才继续。酒杯搁在吧台的声音清脆悦耳,他冷冷地问了一句:“你怎么来了?”

我冲他强笑,没有搭话,径直在他面前坐下来。他转身取出一支啤酒,揭开盖子,摆在我面前,然后又自顾自擦起酒杯。

“半年了,杰。”

听见我开口,他又停下手里的动作,盯着我,喉结滚动,脸上晕开一阵委屈的神情。他轻轻给了我一拳,像个小女生一样:“你还知道半年了啊!”

“快乐吗,最近?”

他又放下酒杯,给自己开了一瓶啤酒,坐下来,反问我:“你觉得呢?”

要不是这么多年的相处,我断然无法接受现在这种有些暧昧的气氛。曾经我有过杰终于长大的错觉,可更多时候他的反应让我怀疑,孤独的杰是不是永远也长不大。没有联系的半年,像流水一样逝去,哗哗啦啦,带走了此前漫长的梦境。这半年我开始适应新的工作环境,开始尝试一些新鲜的事情,开始有真正想要走出去看看这个世界的念头,在我的三十岁,也是杰的三十岁。可我对他这半年的煎熬一无所知。

即使他没说,鼠没说,我也知道,像他这么拧巴的人,一定过得很辛苦。

“我去过她的婚礼。”他咽下酒,讲起这半年发生的事。

去年国庆节假期,他的前任真的结婚了。得知这个消息之前,他就从一直舍不得删掉的她的微信签名里看到三个字:好好爱。她终于有新的人了,他这样想。别人宛转告诉他,她要结婚了,杰也决定开始新生活的心又开始动摇起来。后来他在酒店的门口看见了前任和新郎官的婚纱照,两个人都笑得很灿烂,简直是郎才女貌。杰很想进去看看婚礼仪式,又害怕碰到前任的父母,在门口踌躇的时候,新郎父亲胸前戴着红花走过来搭讪,他又灰溜溜地走了。没有写份子,没有喝喜酒,也没有见到她最美的那一面。

杰回家后捂着被子睡了两三天,一睡醒脑海里就是种种回忆,然后又哭,哭得喘不上气的时候,再点燃一支烟,努力让自己心情平复下来。

“人总要和过去和解的不是吗?”

他若有所思地点点头,随即可能觉得不对:“同自己和解吧?”

“杰,我也非常理解你……”我低下头,脑海里挥之不去的过往又像被快放的电影一样不停闪过,“那时候我不应该那样绝情的跟你说话,我知道你很难受……我知道你也跟我一样在上班的时候忍不住会想到以前,会忍不住想哭,会对一切都失去兴趣。但是我们是大人了,总要跨过这道坎。小孩子才有人帮忙收拾烂摊子,我们没有。”

杰的眼里闪过一丝落寞,本就黯淡的瞳孔,再也找不到少年时的那种光芒。他或许有意岔开沉重的话题,又问我怎么突然来找他。

“鼠跟我谈起了你。”我没有说谎,但这并不是唯一的理由。我想,我总不能就因为这事就失去多年以来每个夏天都和我一起喝酒聊天的朋友,更何况,他那么像我。

“鼠也跟我谈起了你。”他咧嘴一笑。看着他的脸,我想起每次过人脸识别门禁的时候,我就越发觉得自己真的开始变老了,而我二十四五岁的时候,还天真的以为自己能一直保持那副模样永远不会变得沧桑。现在我们俩都像在沼泽中挣扎最终幸存下来的人一样,浑身都是泥泞和密密麻麻的伤痕。

杰会开始他的新生活吗,我不知道。或许像鼠曾经引用的加缪的那句话一样,生活无所谓新旧,无论怎样的方式,都是这一生的必经之路,只管去经历,不要再期待结果。

腾讯云原生开发自动化部署Hexo

2025-04-04 16:30:00

CNB 简介

前阵子偶然在雨月空间站了解到腾讯出了一个云原生构建项目 CNB,一开始以为只是另一个国产的 gitee,但是深入体验后才发现它比半死不活的 gitee 高明得很多,非常接近 github。借用评论区的简要概括:云原生开发是 github codespace,云原生构建是 github actions,制品库是 github registry。

CNB 还是很大方地提供了免费额度,详情见云原生构建定价,实际云开发使用体验也非常不错。自从我换电信宽带后,基本无法直接向 github 推代码,既然如此,那我是不是也可以将我的博客自动化迁移到 CNB 上呢?

CNB 自动化部署hexo流程

必要步骤

1.注册一个 CNB 的账号,目前只支持使用微信登陆;

2.创建一个组织,实测非常见字符可以直接创建,但是短字符或常用字符需要域名验证。因为支持 .cool 域名验证,所以我创建了组织“hin”;

CNB组织创建

3.创建仓库,和 github 一样,你可以创建公开和私有仓库,此外,github 中的私钥等环境变量在 CNB 中得通过创建秘钥仓库来实现;

4.在这里创建访问令牌,以便拉取和推送代码,场景和权限范围还是非常细致的。特别提醒:记得保存生成的令牌!

创建令牌

创建 hexo 仓库

如果你要推送 hexo 博客到腾讯云 cos,那么你可以使用 hexo-cos-demo 这个模板;如果你要推送到自己的服务器,则可以使用 hexo-rsync-remote这个模板。这两个模板都自带云原生开发环境,可以一键上手。

起初考虑到我的 hexo 以及主题版本都太低,至少有两年没更新了,所以我选择了创建空白仓库,复制原 github 仓库文件和代码,参考案例编写环境。

强烈建议:创建私密仓库,以免配置文件中的一些密钥泄露!!!

仓库根目录创建.ide/Dockerfile文件,参考内容如下:

# 帮助文档地址: https://docs.cnb.cool/zh/vscode/quick-start.html
# .ide/Dockerfile,node 版本可自定义
FROM node:18

# 设置软件源
RUN npm config set registry https://mirrors.cloud.tencent.com/npm/

# 以及按需安装其他软件
# RUN apt-get update && apt-get install -y git

# 安装 code-server 和 vscode 常用插件
RUN curl -fsSL https://code-server.dev/install.sh | sh \
&& code-server --install-extension redhat.vscode-yaml \
&& code-server --install-extension dbaeumer.vscode-eslint \
&& code-server --install-extension eamodio.gitlens \
&& code-server --install-extension tencent-cloud.coding-copilot \
&& echo done

# 安装 ssh 服务,用于支持 VSCode 客户端通过 Remote-SSH 访问开发环境
RUN apt-get update && apt-get install -y wget unzip openssh-server

# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8

# 安装环境依赖,便于云原生开发可以调试
RUN npm install #安装仓库内 package.json 的依赖
RUN npm install -g hexo-server
RUN npm install -g hexo-cli

推送 hexo 到仓库

拉取和推送项目的操作和使用 github 一样,不再赘述。在第一次拉取私密仓库或者推送时,需要登陆,在登陆框填写此前创建的令牌即可。

我复制了此前 hexo 文件夹下的 sourcethemes 等文件夹,以及 _config.ymlpackage.json 等文件,然后 git push到仓库。

hexo仓库界面

点击右上角的橙色“云原生开发”,很快就会创建好环境,可以选择使用 WebIDE,也可以使用 VSCode 等 IDE 打开。为了方便,我就直接选择了网页版的 IDE。

cnbworkspace

打开网页版的 IDE 就可以在网页上使用 vscode 进行代码编写、拉取和推送等操作了。IDE 自带了腾讯的代码助手,但是我没使用过它。

cnbwebide

和 github codespace 一样,你可以直接在网页版 IDE 中使用 hexo s这样的命令来在线运行和调试。

此外,建议你使用子模块的方式引入 hexo 主题,以便于后续主题的更新和修改。和在 github 一样,在当前仓库创建 .gitmodules 文件即可,内容参考:

[submodule "themes/butterfly"]
path = themes/butterfly
url = https://github.com/yourname/hexo-theme.git
branch = master

创建密钥仓库

在网页 IDE 中测试没有问题后,即可开始下一步了。

新建仓库,类型选择密钥仓库,参考文档在仓库里创建一个env.yml文件,内容参考如下:

# 密钥仓库 env.yml
RSYNC_KEY: |
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rABAAABlwAAAAdzc2gtcn
NhAAAAfdsghr/tUCVZVy4w5Clrs1Jgwq
-----END OPENSSH PRIVATE KEY-----
RSYNC_USER: root

# 声明指定镜像的插件任务能引用该配置文件
allow_images:
- tencentcom/rsync:latest
# 声明指定仓库的流水线能引用该配置文件
allow_slugs:
- hin/hexo

详细的参数说明参考官方的 rsync 文档。此外,一定要记得粘贴私钥内容有两个要点:

1.在 yml 中,多行内容要用|来表明;

2.由于 yml 对格式非常敏感,所以私钥的每一行都需要缩进两个空格而不是 Tab。

一开始我没注意到第二点,导致尝试推送静态文件到服务器时登陆失败,虽然构建日志中也提供满血版 deepseek 帮忙分析日志,但这也为我明明格式正确却无法连接到服务器埋下了另一个伏笔。

创建自动化工作流

在 hexo 仓库(不是密钥仓库)中创建一个名为 .cnb.yml的文件,它的作用和 .github/workflows/main.yml是一样的,写法上稍有不同,参考代码如下:

main:
push:
#声明构建环境:https://docs.cnb.cool/zh/
- docker:
image: node:18
#volumes缓存:https://docs.cnb.cool/zh/grammar/pipeline.html#volumes
volumes:
- /root/.npm:cow
stages: #安装依赖和 hexo
- name: npm install
script: npm install
- name: install hexo
script: npm install -g hexo-cli
- name: build
script: hexo generate
# https://cnb.cool/cnb/plugins/tencentcom/rsync
- name: rsync 上传到服务器
image: tencentcom/rsync
# 引用密钥仓库配置文件
# 导入环境变量:https://docs.cnb.cool/zh/env.html#dao-ru-huan-jing-bian-liang
imports: https://cnb.cool/yourgroup/env/-/blob/main/env.yml
settings:
user: $RSYNC_USER
key: $RSYNC_KEY
port: 22
hosts:
- 1.2.3.4
# 相对路径末尾带斜线表示同步文件夹里面的内容。
# 不带斜线表示通过这个目录
source: ./public/
target: /www/hexo
prescript:
- echo "prescript"
- ls /www/hexo
script:
- echo "after script"
- ls /www/hexo

到此我们要做的事已经基本完成。当这个文件创建之后,云原生构建便会自动开始。起初,我的每一次构建都在上传到服务器这一步失败了,原因是服务器拒绝了连接。后来查看服务器日志才发现,因为之前失败次数达到设定的值,IP 已经被 fail2ban 给拉黑了。

写在最后

其实这个过程我尝试并失败过很多次,比如 hexo s 的时候发现有标签报错呀,我一直很纳闷,明明主题里有这个标签。后来偶然发现,我的主题是以子模块的方式引入的,在 CNB 仓库里没有声明子模块,导致浪费了很多时间。

其实自从腾讯云的 webify 基本没什么存在感之后,我对 CNB 的期待也不会太高,不知道哪一天这个项目也会被腾讯给淡忘。但是就目前来说,拉取和推送代码快速,云端 IDE 方便,配置给得也很大方,后面试试用来编译 openwrt 的固件都是值得一试的,我们切用且珍惜吧。

我来鹅城只办三件事——不公平!

2025-03-24 20:40:00

提示:本文是一篇牢骚记录,没有美感可言!

其实在上上周的时候我就知道这个结局,当时也决定如果猜想属实,就写点东西发发“bia”言(即阴阳怪气的话),心中有些愤懑总是不吐不快的。

由于想评职称,所以很需要这次赛课的机会。在方案公布之初我就在组内说了我的想法,大家也都非常支持我。因为只有一个名额,为此,上上周,我们两个年级搞了校级公开课,有许多评委老师打分。语文学科共四人参加,上完课我就猜到,抉择应该是发生在我和另一位老师乙之间。

评课时,书记由于有事没能参加,把打分结果交给了我的备课组长。我们得知书记个人给乙打的分数最高,虽然她的课堂并不完整,但是确有一定的感染力。而那天教务处没有公布最终的决定,只是口头说“保持一点神秘”。

上周,学校举办了集团校的复赛,我和乙,以及另外三个学校的老师共五人参加。复赛的课题刚好是我初赛上的那一课,我根据此前评课老师的建议,改进了自己的教学思路和策略。当天无生试讲的五人中,我的发挥并不是特别好,也有一点失误。乙依然表现得很老成,根本不像一个刚参加工作的人,不过她的课完全没契合到这次赛课的主题“Ai 促进教学”。回想起两年前,我还在支教的时候,集团校复赛,我没有契合赛课主题所以没能进入决赛,而今乙也犯了我当初一样的失误。另外三人中,除了有一人确实很优秀,另外两人都是打酱油的,但由于名额,他们三人中有两人必定会参加决赛,即使上得很烂。

试讲完毕,评委现场统计了分数,我最高,乙比我少一点。三选二确定后,教科室却说我们学校谁去决赛依然由领导决定——此时我就已经有更强烈的预感了。

今天得到消息,领导果然选择了乙。说实话看到这个结果的时候我满脑子的不理解,前年我的失误如今在乙的身上却被抹去,并且领导如果早有钦定的人选,又何必要我们两次比试,甚至不在意我们当场就知道分数这回事呢?

于是我发了一篇 bia 言在工作群里,言之不尽,皆在字间:

初,工部遴墨家传人。初试日,余制璇玑仪,测星象则紫微显曜,量地脉则金针自鸣。同试者河东柳生呈木牛流马,亦得主官赞赏。

吏部侍郎亲执量尺曰:”静候钧旨。”越七日复试,余更迭七稿,终成浑天仪,铜蟾吐珠应四时节气。柳生亦有新作,而榫卯尚有松隙。主官评议余为甲等,柳生次之。然礼炮三响,黄门朗声道:”柳生承古法,当入尚方监。”

是夜值雨,浑天仪自转不休,铜珠坠地成卦,乃”火泽睽”象。其言:”但使黄金台未圮,何须匠石运斤风。”