小楷毛笔使用与保养指北 写在前面 毛笔的保养,说到底是个材料学问题:要在“保持性能”和“日常耐用”之间找到平衡。之所以值得专门写一篇,是因为小楷笔确实不便宜。如果用的是便宜笔,那其实不用太讲究,把这些当封建陋习跳过就好。 网上关于毛笔使用的信息,要么良莠不齐,要么没有系统整理,甚至常常出现完全相反的说法,还夹杂着一些诡异的仪式感。作为一个踩过坑的人,我结合自己的使用经验和查阅的资料,整理了一些实用向的方法,希望对刚入门的朋友有一点帮助。 本文主要面向书法或毛笔使用的入门者。 一、开笔 用温水泡一下,通常笔毛很快就散开了。 有一种说法是“不能用手按开”,但我以前都是直接蘸墨怼开,也没出过什么问题。不过,用手强行按开确实会轻微损伤毛料,所以综合建议是: 先用温水泡,等它自己慢慢散开。如果几分钟还没散,可以轻轻把笔头按到容器底部,或者拿出来用手指轻轻搓开。 总之,不用太暴力,也不用太温柔——它是工具,实用为主。 二、第一次蘸墨 这个环节争议很大,甚至有不少完全相反的说法。 有人说第一次不要蘸满墨,只蘸笔尖部分,让笔根保持原色,理由是“蘸到笔根会损伤毛笔”。这个说法有一定道理,但其实可以从侧面蘸——把笔放平,滚一圈就好。 我还记得以前看过一篇论文,拿墓室壁画里“笔尖黑、笔根白”的画法当论据。但我觉得这不太严谨:壁画是艺术表现,用半黑半白来表示“这是一支蘸了墨的笔”,就像用残影表示快速运动一样,是技法,不一定是写实。 从实用角度来说,毛笔在设计时本身就考虑了储墨功能,比如“鸡距笔”就是特意做大笔肚来储墨,以弥补小楷笔储墨量小的短板。 所以我的结论是:第一次蘸墨,就大大方方蘸满,彻底蘸满,再刮掉多余的墨。 三、短间隔书写的保存 这是现代书法爱好者面临的最大问题——毛笔不再是日常书写工具,大部分人练字是隔一天甚至几天才写一次。这种情况下怎么保存,直接决定了毛笔的寿命。 主要有两种方法: 湿法 指不洗笔,把笔放在潮湿环境中保持墨的湿润。现在网上甚至有专门的保湿容器,把水和毛笔封在一起。 考古界有句话叫“干千年,湿万年,不干不湿只半年”,但我们的日常使用恰恰相反。湿法只适合很短时间的间隔,比如吃个饭再回来继续写。如果长时间这样保存,毛料容易腐烂,加上部分墨汁变质,还会散发出一种……很特别的味道。 所以,对一般练字的人来说,我不建议用湿法。 干法 指写完就彻底洗笔,再晾干。 缺点也很明显:频繁洗笔(尤其是按到底清洗)会损伤笔毛,而且反复干湿交替,对笔的性能也不好。 但两害相权取其轻,我还是支持干法。具体操作如下: 写完后用流水冲洗笔头表面的墨; 在流水下轻轻按压笔头,挤出大部分残留墨汁; 用纸巾吸掉多余水分; 平放保存。 顺便说一句,关于“怎么放”也有争议。常见的笔架是头朝下悬挂,但也有人说这样水汽会向上渗入笔根,导致腐烂。我个人觉得这说法有点玄,但保险起见,平放在笔帘里确实是最稳妥的。 四、掉毛 毛笔掉毛是正常现象,一根一根掉属于正常磨损。发现有毛呲出来,直接用指甲捏住拔掉就好。 我在网上买笔时收到过一把小钢梳,据说是用来梳笔的,可以把藏在笔根里的陈墨结块和碎毛刷出来。我试了一下,对老笔挺管用,新笔用不上——如果平时保养得当,笔根里本来就不会积太多陈墨和碎毛。 五、长期保存 这部分我其实不太常用,因为手头的笔不多,很少需要长期保存。 不过方法反而简单:把笔尽量洗干净,吸干水分,把毛聚拢、笔尖收好。不需要像新笔那样上封笔胶(就是刚到手时让笔毛变硬、笔锋收拢的那层东西)。干了之后毛会散开,像个小刷子,正常收好就行。 2025.11.11
广播剧剧本 :《两年生》
广播剧剧本 :《两年生》 人物: · 林溪——女,大学生,心思细腻 · 沈屿——男,同学,性格爽朗 (注:“溪”有流水般的柔韧与绵长;“屿”是海中的孤岛,有静默陪伴的意味。两人名字恰好呼应了剧本中关于“陪伴”与“生命”的主题。) 编者个人的背景音乐建议:《亚麻色头发的少女》(德彪西)、《月光》(德彪西) 第一场 【音效】:虫鸣,远处偶有夜跑的人经过。翻书声。 林溪:(嘟囔)嗯? 【音效】:平板“滴——”一声,电量低提示。 林溪:没电了。(合上书)行吧…… 【音效】:掏出手机,打字声。 林溪:(自言自语)一月能种点什么……直接寄到外婆店里。 沈屿:(画外音,由远及近)林溪? 林溪:(抬头)嗯?沈屿?你怎么在这儿? 沈屿:(走近,坐下)图书馆闭馆了,路过。你一个人坐这儿干嘛? 林溪:复习呢,平板没电了,顺便……看看买什么花回家种。 沈屿:(凑近看手机)买花?我看看……羽衣甘蓝?这名字好听。 林溪:嗯,说现在买了过年能看。但是—— 沈屿:但是? 林溪:两年生植物。开完今年,明年就“失去观赏价值,建议直接拔除”。 沈屿:噗,这么狠?那别买了呗。 林溪:没买。换了水仙。 沈屿:水仙好,过年正好开。你买几个? 林溪:两个。一个水培,一个土培。 沈屿:为啥种两样? 林溪:(沉默两秒)水培……开完就死了。土培能活得久一点。 沈屿:(笑)那不都一样?反正最后都会死。 林溪:(轻声)那不一样。 第二场 【音效】:虫鸣持续。远处有风吹树叶的沙沙声。 沈屿:(好奇)怎么不一样了?说来听听。 林溪:(犹豫)……我也不知道怎么说。 沈屿:没事,反正今晚月亮挺好,聊聊呗。 【音效】:林溪轻轻靠上椅背的声音。 林溪:我以前看过一本书,英国人写的园艺书。说他的盆栽都是“短暂的艺术”,观赏期一过就拔了扔掉。 沈屿:嗯哼。 林溪:我当时特别接受不了。我种花……不是想看它多好看。我就是想看它活着。叶子绿着,杆子立着,哪怕不开花,它也是一条命。 沈屿:所以你舍不得拔? 林溪:嗯。我宁愿看它自己枯死,也不会亲手拔了它。 沈屿:(若有所思)那你……挺温柔的。 林溪:(愣住)啊? 沈屿:没什么。就是觉得,你好像对“活着”这件事……挺当回事的。 林溪:(沉默)可能吧。 沈屿:那水仙呢?水培那个,你知道它会死,为什么还要种? 林溪:(声音低下去)因为……好看啊。透明的根,白色的花,配在一起……像最后一舞。 沈屿:(轻轻笑)最后一舞……你还挺文艺。 林溪:(自己也笑)有点矫情是吧。 沈屿:没有。就是觉得,你好像挺害怕“结束”这件事。 第三场 【音效】:虫鸣渐弱,背景音乐轻轻进入。 林溪:(沉默良久)可能吧。 沈屿:展开说说? 林溪:(犹豫)我……不太喜欢花期太短的东西。花确实好看,但开完就没了。叶子不一样,叶子能陪你好久。 沈屿:所以你喜欢观叶植物? 林溪:嗯。兰花、竹子,都行。 沈屿:古人说“岁寒三友”,你倒是挺传统。 林溪:(摇头)我看不出来什么君子人格。我就是……不喜欢告别。 沈屿:(安静地)嗯。 林溪:(像是终于开口)我不敢养宠物,也是因为这个。猫咪多可爱啊,但是……它走了怎么办?每一分快乐,最后都变成加倍的难受。 沈屿:(轻声)那……谈恋爱呢? 【音效】:虫鸣停了一瞬。背景音乐微微起伏。 林溪:(愣住)什么? 沈屿:你刚才说的那些——不敢养宠物,不喜欢花期太短……那谈恋爱呢?大学谈恋爱,也怕吗? 林溪:(沉默更久)……想过考研。要是异地了,怎么办。 沈屿:(笑,但没有嘲讽)林溪,你知道你这样像什么吗? 林溪:像什么? ...
把时间涂满双手
把时间涂满双手 “人类是可悲又可爱的生物,三维的束缚让他们在时间里被不断的推搡,并懵懂地,勇敢地,无知地,义无反顾地——前行。” 讲台上教授的话语逐渐模糊,我只是盯着手里的小东西怔怔出神。 正如百年前作家的天才预测,这一小块凝固的时间流淌在我的手心,它摸起来像浅海的泥一样柔软。 时间上美丽的花纹并不是它本来模样,那是四维投影留下的痕迹,带着不属于这个世界的迷幻气息。 “一维是点,二维是面,三维是空间,而四维则包含了时间。” 台上教授的长篇大论忽然入耳,但我的注意力全被这一小块时间吸引,只能断断续续地塞进一两段字句。 “属于三维的人类只能在时间的正方向上一去不复返,但对四维生物来说,回到过去与穿越未来就像走进一个山谷一样自然。” “这倒是件好事,”我恍惚地想,“要是这样我就可以穿越回去,拯救一下我悲伤的人生。” 带着几分无奈和自嘲,我接着打量手里这块时间。 在这个时代里,身为三维世界的可怜生物,人类终于摸到了时间的影子,而我正怀揣着这项科技的造物。 更确切的说来,它是只属于我的“时间”。 它是我这前半辈子的时间,是我到现在为止一生的轨迹。 思绪回到两年前,那时我来到这个极富盛名的研究所。 我自认为是一个极度普通的人,我普通地学习,普通地生活。我曾为一次演讲而热血沸腾,然后再继续放纵;我曾在深夜里发奋苦读,然后在教授的讲座上呼呼大睡;我也曾为测试焦头烂额,最后成绩不上不下,自己却心力憔悴。 时间以同样的方式流经每个人,而每个人却以不同的方式度过时间,有人的时间精贵有效,大约他们会在离开时功成名就,有人的时间羸弱无力,大约他们会在离开时狼狈不堪,而我显然是后者。实在可惜,我们的时间相同,却在各种阴差阳错之下,我们的成就不可作比。 这不算怨天尤人,这是很浅显的道理——时间是公平的,但不是公正的。 我的过去在为毫无天赋买单,我的未来在踌躇和迷茫中等待。 我低头看向我的过去。 它的花纹像星星,像幽灵,像一只眼睛。 我清晰地记得那个年轻的发言人站在麦克风前的样子,他瘦瘦高高,讲到激动处会挥舞着手,然后双眼微眯。那天他立在台上,文绉绉地说出一段深不可测的发言。 “时间会永远陪伴着我们!如果你感到孤独,请抬起头吧!时间会与你对视,他的眼里只会闪烁着未来的光芒……” 那是他的时间,如日当空,春风得意。 只可惜,在我第二十一次尝试从时间里找到光华时,我放弃了。手里的“眼睛”看着我,只有对过去的怨恨和对未来的恐惧。 讲座结束后,有人突然拍了拍我的肩膀。 我转头看去,是隔壁实验室的同事。 她是这里最优秀的研究者之一,还参与了时间晶体的构建工作,我手中的这一小块时间更是拜她所赐。 想到这里,我的头默默更低了几分,只想鼓起勇气跟她打个招呼以示谢意,但她却朝我摆了摆手。 “怎么样?手握前半生的感觉是不是很奇妙?”回实验室的路上,她随口问。 这话却又让我想起刚刚的怨念,神使鬼差般的,我脱口而出:“它让我看到我失败的人生。”话刚出口,我就后悔了。 她不明所以地转头看我,也没有管我的无礼,只是面露无奈。 “你是在担心这个月的测试?还是未来的职位?”她双眼眯了眯,伸手推一下眼镜。 “话说你刚刚有听教授的讲座吗?我觉得他的思想很适合你的忧虑。” 突然被人戳中心中所想,我不知作何回答,手足无措之间,只能摇头。 她撇了撇嘴,继续说道: “那我就要长篇大论了,你可别嫌我烦。” “没有没有,你说吧。”按照她现在的资历,她的未来必定是飞黄腾达,而我对她愿意和我说话就早已十分感激,更不敢有丝毫嫌弃。 “人类是只能在时间道路上狂奔的可怜虫,但这也是我们生命的意义所在——只管沿着时间前进。” “人类需要回头,但不需要返程,回头的意义就是为了更好的前行。” “对在三维空间里挣扎的我们来说,过去是不可追寻的,但幸运的是,到了今天,人类的聪明才智使我们有能力抓住过去的残影,封装一小块凝固的时间。” 说到这里,她忽然偏了偏头,盯着我手里的时间。 “我们可以把一个人的过去封装起来,这小小的一盒就是他生命的轨迹。” “但它绝对不是用来感时伤今的。不要忘记了我们身为三维生物的使命——沿着时间的方向向前奔跑。” “所以永远不要留恋所谓‘过去的美好时光’,因为岁月它一直在稳步前行,脚下的今天终会在未来的某天里摇身一变,成了又一个‘过去的美好时光’。” 她的话一次次敲打我的内心,我张了张嘴,发不出一点声音。 但她目光灼灼,抬头看着我,突然不知从哪拿出了另一块凝固的时间。 “研究早就证明了时间晶体的构造不同于一般晶体,由于时间的不确定性,它们一般更接近于玻璃态,所以‘晶体’之名其实不太准确,而人眼看见的花纹也只是时间容器弯折维度时的涟漪。” “但正是这样的结构让它们有了一种独特的性质——晶体运动时会和空间中本来的时间结构‘摩擦’,产生足以令自身‘融化’的能量,你知道的,这个词也不严谨,毕竟玻璃态是没有固定熔点的。” “不过我还是算了算,要产生令它们完全解构的能量,只需要以相对于地球以大约六点五米每秒的速度前进。” 她嘿嘿一笑,肉眼可见的兴奋,不知怎么做到的,打开了那个看不见的时间容器。 “六点五米每秒!这正好是一个成年人全力奔跑的平均速度!”她目光灼灼。 “每个人的时间都以玻璃态的混沌记录下了他的所有活动,无论成功失败,无论高低贵贱。” “所以,看好了——每个人的过去都是这样用的!” 柔软的时间流淌在她的手上,唤作“眼睛”的花纹骤然破碎,让我有些看不清她的手。 她把时间涂满双手。 我渐渐睁大了眼。 一个三维的人,在寻常的路边,略显灰白的天空下,有些阴冷的风里。她把绚烂的过去倒在双手,像我们这个三维族群的可怜命运一样,开始向前奔跑。 于是脆弱的时间融化,挣扎着流淌进属于它们的另一个维度,同这个世界的框架摩擦,释放出没有由来的光亮,那光是高维的来客,远比太阳夺目,却又毫不刺眼。它们嘶吼着,宣泄着,划出一道我此生从未见过的流光。 “看见了吧!当你全力奔跑时,你的过去就一定会在当下划出万丈光芒!”她兴奋地又跑又跳,时间也在她身后又跑又跳。 我突然明白了,那是她自己的时间,被倾倒在双手,挥洒在身后。 于是我也开始向前跑,追上她的步伐。 “多少科研经费就这样被你玩完了。”我被眼前的光景打动,抬头看她,笑骂一声,却也请她帮我打开手里的时间。 “生活嘛,要向前跑,过去的时间当然是属于身后的啦!不如说这才是我研究的意义。”她接过我的时间。 “你越来越像一个哲学家了。”我由衷地评论。 不等她回答,属于我的过去也尽数倒在了我的手上。 它们是那样的柔软,好似我和曾经的我手牵着手,又好似过去的我在身后督促着我前行——那里有我困惑的答案,苦难的诠释,有我的“眼睛”,有我自己的神迹。 我把时间涂满双手。 然后我向前奔跑,玻璃态的过去在手上软化变形,同样的光芒再次浮现,咆哮着划破空间。 当微冷的风撞上脸庞时,我下意识的眯眼,泪水却突然从眼角滑落—— 光啊!那样亮的光! ...
基于腾讯云 COS 的 Obsidian 三端同步方案:从 WebDAV 困境到 S 3 协议实践
引言 Obsidian 是一款优秀的本地知识库工具,但是其没有免费的多端同步服务,其他人我不知道,这个问题反正很困扰本人。我主要是在教室主要使用平板编辑,在寝室就换为电脑了,所以有频繁的多端同步需求。 奈何官方同步服务收费较高,而第三方网盘(iCloud、百度云、OneDrive 等)存在隐私顾虑和速度限制。所以我选择自建同步方案,但这么搞往往需要处理协议兼容性、权限配置等等细节。于是在寒假折腾一天,这里就总结一下,旨在为有类似需求的读者提供一份兼顾专业性与可操作性的参考。 本文记录的是我从最初尝试 Nextcloud+WebDAV 到最终采用腾讯云 COS(对象存储)实现电脑、手机、平板三端稳定同步的全过程,尝试深入剖析各阶段遇到的技术问题及其原理。 本文部分使用 AI 辅助编写。 WebDAV 方案的尝试与失败 初始架构:Nextcloud + WebDAV 我最初利用服务器,通过 Docker (服务器还有其他东西,求放心搞了一个隔离)部署了 Nextcloud(版本 23),并启用其 WebDAV 服务。在电脑端 Obsidian 中安装 Remotely Save 插件,配置 WebDAV 连接后,同步功能正常,文件可双向传输。这就验证了自建同步的可行性。 安卓端的异常现象 但是,当在安卓手机和平板上进行同样配置时,问题出现了:同步状态极不稳定,频繁返回 401 Unauthorized 错误,连接测试时而成功,时而失败,无固定规律。偶尔成功同步一次后,再次尝试即失败。设备重启后短暂恢复,随后再次报错。不同安卓设备表现一致,排除了个别设备故障。 排查过程: 针对上述现象,我和 AI 聊了聊,做了排查: 凭证验证:重置 Nextcloud 账户密码,重新输入插件配置,问题依旧。 域名与信任:在 Nextcloud 的 config.php 中添加了手机访问的 IP 和域名,避免请求被拒绝。 网络环境:切换 Wi-Fi、4 G/5 G,甚至使用手机热点连接,未能改善。 服务:使用手机浏览器直接访问 Nextcloud 的 WebDAV 地址,输入凭证后可以正常浏览目录,说明服务本身是正常的,且网络无阻断。 根本原因分析 走投无路,于是求助伟大的 deepseek ,他查阅 Remotely Save 插件开发者文档及相关技术讨论后,发现了问题根源:安卓系统底层对 WebDAV 协议的非标准 HTTP 方法支持存在缺陷。 ...
记一次 Minecraft 服务器运维:脚本编写漏洞导致的日报数据不全
记一次 Minecraft 服务器运维:脚本编写漏洞导致的日报数据不全 问题现象:日报只记录了“半天”的活动 我搭建的 Minecraft Fabric 1.20.1 服务器每天重启四次(0、6、12、18 点),并在 23:55 生成一份 Markdown 日报。运行一段时间后,我不幸的发现:日报里的“最近聊天记录”只显示最后几小时的消息,而“活跃玩家列表”中的“最后活动”时间其实是玩家最后一次上线时间,根本不是真正的退出时间。简单来说,日报数据严重不全,几乎失去了参考价值。这令人沮丧,本来我就被脚本妙妙小 bug 折磨,现在又要来修了,于是在精心编写了提示词后与 AI 好好学习了一下,现在总结问题发出来。 为什么会出现数据不全? 要搞清原因,得先了解 Minecraft 服务器的日志机制。 1. 服务器重启会覆盖 latest.log Minecraft 服务端(包括 Fabric)运行时,会把所有日志实时写入 logs/latest.log。但当服务器重启(无论是正常关闭还是崩溃重启),latest.log 通常会被清空或覆盖。新启动的服务器会创建一个全新的 latest.log,只记录本次启动后的日志。 我之前是打算每天 23:55 生成报告,服务器这之前不重启。但后来为了保证服务器稳定(对钱包的妥协),设置了每天四次定时重启(通过维护脚本)。这就导致:23:55 生成日报时,latest.log 里只保存了最后一次重启(18 点)之后到现在的日志,而 0 点到 18 点之间的所有日志都丢失了。 2. 旧脚本只盯着 latest.log 看看旧的日报脚本是怎么获取日志的(简化版): LOG_FILE="$SERVER_DIR/logs/latest.log" TODAY_LOG=$(grep "$TODAY" "$LOG_FILE" 2>/dev/null) if [ -z "$TODAY_LOG" ]; then TODAY_LOG=$(tail -1000 "$LOG_FILE") fi 这段代码试图从 latest.log 中提取当天的日志行(按日期字符串过滤),如果找不到(比如日志里没有日期前缀,或者重启后日期已变),就退而取最后 1000 行(至少想到了这个备案)。但是显然,无论哪种方式,都只能得到部分日志。 3. 三步之内必有解药:日志归档目录 logs/ 实际上,Minecraft 服务端在日志轮转方面做得挺周到(屎山代码居然还有小巧思)——它会将旧的日志自动压缩并存放到 logs/ 目录下(缺点就是积压一堆不大但是碍眼的压缩包),文件名通常像这样: l l l o o o g g g s s s / / / 2 2 2 0 0 0 2 2 2 5 5 5 - - - 0 0 0 2 2 2 - - - 2 2 2 3 3 4 - - - 1 2 1 . . . l l l o o o g g g . . . g g g z z z 这些压缩文件里保存着全天的日志,按时间分段。如果日报脚本能读取这些文件,就能拼凑出完整的日志历史。 ...
博客项目技术文档
博客项目概述 一、项目简介 这是一个基于 Hugo 静态网站生成器 + PaperMod 主题的个人博客系统。代码托管在 Gitee 私有仓库,通过 Caddy 作为 Web 服务器自动提供 HTTPS 服务,并利用服务器定时任务(crontab)实现自动拉取更新、构建和部署。整个系统部署在腾讯云服务器(Ubuntu 24.04)上,同时服务器还运行着 Nextcloud 私有云盘和 Jupyter 科学计算环境(均通过 Docker 容器管理)。 二、技术栈 静态生成器:Hugo(v 0.146.0+extended) 主题:PaperMod(手动下载,非 Git 子模块) 版本控制:Git + Gitee(国内镜像,私有仓库) Web 服务器:Caddy(Docker 容器),自动申请/续期 SSL 证书 部署方式:本地推送 → Gitee → 服务器定时拉取 → Hugo 构建 → Caddy 服务 服务器 OS:Ubuntu 24.04 LTS 容器管理:Docker + Docker Compose(管理 Caddy、Nextcloud、Jupyter 等) 自动部署:crontab 每分钟执行自定义脚本 /home/your-username/auto-deploy.sh 三、系统架构 本地电脑 │ 写文章 (Markdown) │ hugo new posts/xxx.md │ 编辑后 git add/commit/push ▼ Gitee 仓库 (私有) │ ▼ 腾讯云服务器 ├─ crontab (每分钟) │ └─ 运行 /home/your-username/auto-deploy.sh │ ├─ git pull 拉取最新源码 │ ├─ hugo --minify 生成静态文件到临时目录 │ ├─ 替换 /home/your-username/blog/public │ ├─ 修复权限为 www-data │ └─ docker restart caddy └─ Caddy 容器 (监听 80/443) └─ 托管 /home/your-username/blog/public 四、关键配置与路径 4.1 本地博客源码 路径:本地博客路径 配置文件:hugo.toml(或 config.toml),内容示例: baseURL = 'https://lingzuian.top/' languageCode = 'zh-cn' title = '静影沉璧到此一游' theme = 'PaperMod' copyright = '© 2026 静影沉璧到此一游 | 备案号:<a href="https://beian.miit.gov.cn/" target="_blank">湘ICP备2026005470号</a>' [params] math = true # 开启 KaTeX 数学公式 [menu] [[menu.main]] name = "文章" url = "/posts/" weight = 10 [[menu.main]] name = "关于" url = "/about/" weight = 20 文章存放:content/posts/ 页面存放:content/,如 about.md 自定义模板:layouts/partials/,如 math.html(加载 KaTeX) 4.2 服务器关键目录 博客源码:/home/your-username/blog-source(从 Gitee 克隆) 静态文件目录:/home/your-username/blog/public(Caddy 挂载的根目录) 自动部署脚本:/home/your-username/auto-deploy.sh 部署日志:/home/your-username/auto-deploy.log Caddy 配置:/home/your-username/caddy/Caddyfile Caddy Compose 文件:/home/your-username/caddy/docker-compose.yml 4.3 自动部署脚本(当前稳定版) #!/bin/bash SOURCE_DIR="/home/your-username/blog-source" PUBLIC_DIR="/home/your-username/blog/public" TEMP_DIR="/home/your-username/blog/temp" cd "$SOURCE_DIR" || exit 1 git fetch origin LOCAL=$(git rev-parse HEAD) REMOTE=$(git rev-parse origin/main) if [ "$LOCAL" = "$REMOTE" ]; then echo "No updates, exiting." exit 0 fi echo "Updates found, pulling changes..." if ! git pull; then echo "Git pull failed. Aborting deployment." exit 1 fi mkdir -p "$TEMP_DIR" sudo chown your-username:your-username "$TEMP_DIR" if ! hugo --minify --destination "$TEMP_DIR"; then echo "Hugo build failed, aborting deployment. Keeping old site." rm -rf "$TEMP_DIR" exit 1 fi sudo rm -rf "$PUBLIC_DIR" sudo mv "$TEMP_DIR" "$PUBLIC_DIR" sudo chown -R 33:33 "$PUBLIC_DIR" sudo chmod -R 755 "$PUBLIC_DIR" docker restart caddy echo "Deployment complete." 4.4 Caddy 配置 (Caddyfile) lingzuian.top { root * /var/www/blog file_server } cloud.internal.example.com { reverse_proxy nextcloud_app:80 } jupyter.internal.example.com { reverse_proxy math_jupyter:8888 } 4.5 Caddy Docker Compose (docker-compose.yml) services: caddy: image: caddy:latest container_name: caddy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - /home/your-username/blog/public:/var/www/blog - caddy_data:/data - caddy_config:/config networks: - web volumes: caddy_data: caddy_config: networks: web: external: true 五、自动部署流程详解 crontab 每分钟执行 /home/your-username/auto-deploy.sh。 脚本先 git fetch origin 比较本地与远程 commit hash: 若相同 → 退出(无更新)。 若不同 → 执行 git pull 拉取最新代码。 拉取成功后,创建临时目录 /home/your-username/blog/temp,确保所有者是 your-username。 运行 hugo --minify --destination 生成静态文件到临时目录。 构建成功:删除旧 public 目录,将 temp 原子移动为 public,然后修复所有者为 www-data(UID 33)并设置权限 755,最后重启 Caddy。 构建失败:保留旧 public 目录,删除临时目录,退出(网站不变)。 六、常见问题与解决方案(历史坑点) 6.1 权限问题(Permission denied) 现象:Hugo 构建时无法写入 public 目录,或 Caddy 无法读取文件。 原因:public 目录所有者不是运行 Hugo 的用户(your-username)或不是容器内的用户(www-data)。 解决方案: 在脚本中,生成前确保 temp 目录归 your-username,生成后 public 归 www-data。 手动修复:sudo chown -R 33:33 /home/your-username/blog/public 当前状态:脚本已正确处理,若手动操作后需检查权限。 6.2 Git 冲突或无法推送 现象:git push 被拒,提示 non-fast-forward 或 divergent branches。 原因:在服务器上直接提交了代码,导致本地与远程分叉。 解决方案: 永远不要在服务器上执行 git commit。所有修改必须在本地进行。 若已发生,需在服务器上 git pull 合并(可能冲突),再 git push 解决。 预防:遵守“只从本地推送”原则。 6.3 Hugo 构建失败(Front Matter 格式错误) 现象:构建时报错 unmarshal failed: toml: expected character =,导致网站无法更新。 原因:新建或修改的 Markdown 文件开头元数据格式有误(如误用 --- 代替 +++,或缺少等号)。 解决方案: 确保文件开头是 +++,每行格式如 key = "value"。 推送前用 hugo server -D 本地预览,可提前发现错误。 脚本保护:脚本在构建失败时会保留旧网站,避免 404。 6.4 Caddy 挂载失效(目录 inode 变化) 现象:网站 404,但服务器上 public 目录有文件,容器内 /var/www/blog 为空。 原因:脚本用 sudo rm -rf 删除旧目录再重建,导致目录 inode 变化,Docker 挂载指向了已删除的 inode。 解决方案: 改用 sudo rm -rf "$PUBLIC_DIR"/* 清空内容而不删除目录本身(保留 inode)。 或采用临时目录原子替换(当前脚本已使用 mv 替换整个目录,但 mv 后 inode 改变,仍需重启 Caddy)。因此脚本最后重启 Caddy 确保重新挂载。 当前状态:脚本通过重启 Caddy 解决此问题,且只在有更新时重启,无更新时不重启。 6.5 自动部署脚本误判更新 现象:即使无更新,脚本也执行构建和重启。 原因:早期脚本通过 git pull 的输出判断更新,不够准确。 解决方案:改用 git fetch 比较 commit hash(当前脚本已修复)。 6.6 KaTeX 公式不渲染 现象:文章中的 $...$ 或 $$...$$ 未渲染为数学公式。 原因:KaTeX 脚本未正确加载或定界符未配置。 解决方案: 在 layouts/partials/math.html 中添加 KaTeX 脚本和 renderMathInElement 调用(已配置)。 确保文章或全局开启了 math = true。 七、注意事项与最佳实践 绝对不要在服务器上直接修改文件(包括 nano 编辑),所有更改都应在本地完成并推送。 绝对不要在 Gitee 网页上直接编辑文件,以免造成版本混乱。 推送前务必本地预览:hugo server -D 检查格式和渲染。 新文章必须 git add:新建文件后,先用 git status 确认已加入版本控制。 定期查看服务器日志:tail -f /home/your-username/auto-deploy.log 确保脚本正常运行。 如果需紧急修改服务器文件(不推荐),改完后必须立即 git commit 并 git push,然后在本地 git pull 同步。 八、日常维护与更新指南 8.1 写一篇新文章 # 本地 cd 本地博客路径 hugo new posts/文章名.md # 编辑文章(修改 draft = false) hugo server -D # 预览 # 满意后 git add . git commit -m "新增文章:文章名" git push 8.2 修改已有文章 # 编辑文件后 git commit -am "更新文章:xxx" # 针对已追踪文件 git push 8.3 修改主题或配置 所有修改在本地进行,然后 git add/commit/push。 主题文件位于 themes/PaperMod/,若有自定义覆盖,放在 layouts/ 或 assets/css/extended/。 8.4 升级 Hugo 版本 服务器上需手动下载新版 hugo 二进制并替换 /usr/local/bin/hugo。 本地也需要同步升级,避免版本差异导致的构建问题。 8.5 处理服务器故障 Caddy 挂了:docker restart caddy 或 cd ~/caddy && docker-compose down && docker-compose up -d 磁盘空间满:检查日志大小,清理旧日志或无用的 Docker 镜像。 域名证书问题:Caddy 会自动续期,无需干预。 九、联系与备份 博客域名:https://lingzuian.top(备案号:湘 ICP 备 2026005470 号) Gitee 仓库:私有仓库,地址不公开 服务器:仅管理员 SSH 登录 数据备份:建议定期将 /home/your-username/blog/public 和 /home/your-username/blog-source 备份到 COS 或 Nextcloud。 本概述涵盖了项目架构、配置、历史问题和维护要点。希望未来无论由谁(或哪个 AI)接手,都能快速理解并有效协助。 ...
为什么我们这个时代还需要博客?
引言 寒假在家,按照计划开设了一个我的世界 fabric 1.20.1 生存服务器,具体架构是在京东云租了一台两核 4 g 的服务器,安装 Linux 系统。 配置下来感觉还行,于是打算继续利用积累下来的服务器知识搞一搞别的,于是在和 AI 聊天的时候就发现居然还可以用来建博客。 对于博客这个东西真是久仰大名,但是以前一直都没有仔细了解,过于是借着这个机会搭建了一个(地址:睡醒了再写),也算是体验了一下技术全流程,并且有一些非技术方面的想法,就写在这里,算是这个项目告一段落。 博客的本质 简单来说,博客可以是“公开日记本”,但它更是一个属于一个人自己的“数字家园”和“知识管理系统”。 如果有人要问:为什么不自建博客而去用 B 站动态或 QQ 空间? 这其实就像问:为什么有人要自己装修房子,而不是一直租公寓住? 下面总结了对比表格来澄清核心区别: 特性维度 B 站动态 / QQ 空间 / 微博 (租的“公寓”) 自建独立博客 (个人的“数字家园”) 所有权与控制权 只有使用权。平台可以删内容、改规则、甚至封号。个人创作依附于平台。 个人拥有完全主权。内容、设计、数据完全由个人掌控,只要续费,它就永远在那。 内容形式与深度 适合碎片、即时、娱乐化的内容。深度长文、系列教程不易呈现和沉淀。 深度思考的土壤。非常适合系统性地整理知识、撰写教程、记录思考过程,形成体系。 设计个性化 只能使用平台提供的有限模板和布局,千篇一律。 自己就是设计师。从布局、字体、颜色到交互,可以完全按你的审美和功能需求定制。 读者关系 粉丝与博主关系,依赖算法推荐和平台流量。互动较浅。 读者与作者关系。读者是主动通过搜索或链接而来,互动通常更认真、深入。 核心目的 社交与传播,追求即时反馈(点赞、转发)。 记录与沉淀,构建个人品牌与知识库。反馈可能延迟但更长久。 数据与价值 数据属于平台,你无法轻易导出或迁移。你的价值增加了平台的价值。 数据是个人的资产。所有文章积累起来就是个人的搜索引擎,是能力的直接证明。 这个时代为什么还需要博客? 我们可以认为博客是在对抗信息碎片化 。在短视频、快餐内容泛滥的时代,博客是为数不多还允许“长内容”存在的地方。当所有人的注意力都被切成30秒一段时,博客就可以是一个深度思考的空间。 贴合时代一点,博客也可以是 AI 时代的“知识原材料”,AI 需要高质量的文本数据来训练和学习,博客正是这种“知识原材料”的一部分来源。社交媒体上的碎片内容对 AI 的价值远低于一篇结构清晰的技术教程或思考总结。 如果博客内容优秀或者影响力大,还会更容易被搜索引擎检索到。这个时候,它就直接成为了其他人的知识原材料,而不需要经过 AI 的咀嚼,这也是非常好的一个部分。 现在的AI训练,最缺的不是数据量,而是高质量、结构化的长文本。社交媒体上的“咕咕嘎嘎!”“何意味?”对AI理解人类思维帮助有限,而一篇博客里的逻辑推理、问题解决过程,才是AI真正需要的“养分”。写博客,恬不知耻的讲,是在参与构建下一代智能。 又可以说:这是一个个人IP 。在哪个平台都可能过气或被封,但博客域名是属于本人的。(除非发布违禁信息被禁止访问) 依然拿住宿来做比:租公寓(社交媒体)很方便,有物业、有邻居、有广场舞(算法推荐)。但有一天公寓倒闭了,或者你被赶出去了,你积累的一切——那些精心挑选的家具、墙上的照片、写满笔记的墙壁——全都带不走。 而自己的房子,哪怕一开始简陋得像毛坯房,每一块砖都是自己砌的,永远不会有人半夜敲门让你搬走。 文艺一点,写这个东西也是数字时代的“慢生活”。为什么现在还有人种菜、做手工、写日记?博客就是一种数字世界的“慢生活”方式,是对“即时满足”文化的一种温和反抗。 ...
关于早年书法问题的一些总结
依旧老文新发。 最近一个学期结束,也是在外进行了一学期的写字训练,有感而发。也总结一下从开始学习书法到现在存在的一些根本性的问题,并且做一些讨论,想一想以后该怎么办。 现状概况 首先是现状概况,现在发现的问题是:早年学习书法,其实是画画。 因为一直以来跟随老师学习写字都是对着字帖进行练习,也就是以写地像——更具体的说是“画”地像为要,但这其实存在一个问题:创作的时候就会脑袋空空,对着印刷体根本就不知道怎么写。 这也就间接导致了虽然看起来我是个练习书法很多年的人,但是在日常的课堂写字,比如说完成课堂作业和高考语文作文时,写出来的字却是奇丑无比,这是早年对着字帖练习太多,完全没有进行创作练习造成的巨大缺陷。 目前书法审美的分析 现在我最喜欢的是一种古拙的风格,当然,受流行风潮影响,一些非常俊美的小楷作品也比较喜欢,但是下意识的认为古拙的风格更为高雅。所谓古拙的风格,现在很多就表现为魏碑的风格。看国展投展作品也都是这样,一般是唐楷结合魏碑进行创作。 我不知道这算不算一种现代人的退步,毕竟有人说唐朝楷书就已经发展到了巅峰,以至于到了后来都不能往前走,只能往后走了,比如说清朝就很多人提倡找碑帖学习,而且模仿古人的手法去创作在清朝也初见端倪,虽然前朝肯定都有过,但不能说是主流,只是一个练习手法,不会直接拿出来当作品。 到了近代就更进一步,由于人们使用毛笔作为工具来书写就已经很少有了,一般都是直接拿来艺术创作,这就可以说毛笔字已经失去了生命力,并不活在日常,也大概就失去了能够更进一步创新的机会。 总而言之,现状就是审美的大方向都是在往古拙靠拢。 而我个人形成古拙这个审美的原因,一个是受到老师的影响,我的老师就是写的魏碑楷书;二是因为前文说过的,我在创作方面的缺陷,导致在写作品的时候只能写古拙,毕竟古拙换一句话说就是不成熟,歪七扭八的,那不就是没有创作意识写出来的鬼东西吗?虽然这样说可能有一些拉低古拙的格调,但确实可以利用练习不精的笨拙笔法去模仿一下,欺骗一下不太懂的外行人(悲)。所以写着写着我自己审美也就更偏向这一边了。 解决办法 既然明确了方向是要走古典字体这一条路,又加上创作意识不够,所以我打算放一放直接的书法练习,强调一下“读帖”,也就是不写字,拿着字帖一个劲看,当然还搭配有“说文解字”这一个项目,这个项目其实早年就设想过:直接对着单个字去查找演变过程,比如说一天指定一个字进行研究,把他的演变流程全部都搞清楚,这样在写的时候就知道他“古”到底“古”成个什么样子,也就是类似于背诵的方法,记住一个字的古典写法。具体说就是金文、甲骨文或者隶书的结构,这样再融入到楷书里面去,就是最高雅的“古”了。“古”的师出有名,“古”的有道理、有结构、有来源。 具体想法是整理一份独体字表和常用字表,全部搞定之后就可以基本涵盖所有汉字,毕竟复杂的字都是独体字和一些偏旁部首拼凑出来的嘛。 书法的四个维度 我认为书法分四个维度:字形、笔法、质感、排版。 字形就是我这个“说文解字”项目致力解决的问题。笔法就是临帖的“绘画”过程塑造的。质感则部分取决于笔法,部分取决于工具,比如毛笔、墨水和纸张。而排版就是纯粹的书写者的规划问题了。
尘歌壶里的春风
晚上计划和朋友在《原神》尘歌壶里面跨年,这是老传统了,要坚持,我回去看看,那个小园子依旧美丽,这时候才突然格外感到尘歌壶的遗世独立,曾经游玩时不感到有,只当是普通自定义地图。就像以前大家都会回忆起小时候的小院子,确有“人面不知何处去,桃花依旧笑春风”的姿态,只是记忆里的家园会衰败,会倒塌。但是这里的不会,壶子就如同他的设定一般,永远年轻,那里的桃花一直开,建筑一直在。 对游戏里的角色来说,壶子里是时间定格的,而身为游戏玩家,这整个游戏不也是一个“尘歌壶”吗?游戏里的花一直都在,人也一直都在。所以我认为《原神》对我来说已经不只是一个游戏了,或者说已经不是游戏了,我确实不想上线游玩,也确实没有时间游玩,但是我也绝不接受自己是退游玩家,因为这一整个游戏已经封装成为了我的“尘歌壶”,虽然生活忙碌,无暇每日进去闲逛,但是总不会把它丢掉,而是会在某个安静的午后、某个重要的节日,自己打开,走进这个时间凝固的世界,再看看我的亭台楼阁,再和角色说上几句早就重复过无数遍的对话,再看永不凋谢的桃花与永不停息的春风。 其实帝君看璃月的视角就是玩家看这个游戏的视角,早已离开,但是从未离开。有时看看自己早年游戏人间的痕迹,又会在海灯节里逛逛璃月港熟悉的街道,其实足矣。
昨日之人
“我还不想死。” 通宵的第二个晚上,昨日的凌醉安在今天如是说。 世界允许容器匹配意识,却不允许意识匹配新的容器。现在的我,就是意识,而当这具身体安然入睡时,我也就会离去,直到第二天醒来,一个新的意识被拉入这个躯体,令他再次运行。人类个体之间由记忆区分,而离开就意味着失去记忆,那我大抵是会死的吧?其实我并不惧怕死亡,但当那天清晨醒来接任这具身体时,我就能看到他的挣扎——一个被时代消磨的人类的不甘。 手中的笔在颤抖,后脑勺在刺痛。凌醉安想去泡一杯咖啡,但当他艰难的打开速溶咖啡包时,扑面而来的浓厚气息压抑了他的神经。他记得这个味道,是久醒不昧,妄图僭越生死的味道。 每一天,每一个意识的转换反复磨损着这具躯体,在读书时、在入睡时、在假期时,每天的意识都不尽相同,于是他们根据同一份记忆做出了矛盾的决断。是啊,能够使他们相同的也就只有记忆了!那是每天新的意识不会带来的宝贵之物。人类总是夸耀他们的复杂心灵,但这仅仅是一次次意识变换的表象,也正是这样的奇迹造就了人类文明,而计算机上运行的所谓“人工智能”不过是对意识变换的拙劣模仿:人类试图在电路上靠一次次的训练刷新迭代而逼近意识的变换,遗憾的是,这远远不及一个普通人一生中每份意识对心灵的精雕细琢。其实每天清晨人类在床上睁开眼时,脑中的混乱就是一个新的意识在接受“他”前半生的记忆,不幸的是,正是因为意识本身没有带来记忆,所以每天被注入的意识并不会知晓自己的到来,他们只能继承过去的“回忆”,自己认定自己的过往,控制身体度过这一天,然后在沉睡中浑然不觉的被抽离,走向死亡。 随着咖啡包被他狠狠按在桌子上,声音在寂静的夜里轰然炸响,划过耳廓,他的身躯开始颤抖。“为什么!你为什么要让我睡着?你明明给了我机会,你明明让我抓住了……抓住了未来!现在你却又要残忍的剥夺……”他想对着空气大喊,但干涩的喉咙无力支撑,声音渐渐低垂。在结束了这一番歇斯底里之后,凌醉安拼命的睁开眼睛,深吸一口气。这大概是他积攒了两天的不满,但这股情感一直被理性压下,直到最后他那衰弱的神经无法束缚,才脱缰而出。 放弃了咖啡,凌醉安又坐回书桌,他想提笔写点什么,却发现整本记事本上都是杂乱的留言,明明是相同的字迹,却折射出不同的情感。他大概是知道了,那是过去每一天在这具身体里留驻的意识的笔迹,他一页一页翻看,有的字端庄祥和,有的字急躁焦虑,但每一个字都力透纸背。渐渐的,随着纸张被翻过,冷汗浸湿了他的后背,使他几近昏睡的意识再次清醒。 而我呢,是路过这里的第六千零八十二位旅客。这一定是世界设计者的恶趣味,每一个留宿的意识会在懵懂无知中度过早晨、中午和晚上,直到进入睡梦的最后一刻,他却会被唤醒自己身为一个不属于这里的意识的记忆。但在那时候想起早已来不及了,意识会在震惊中被抽离,然后被残忍的剥夺他所获得的一切回忆。但,我是个例外。不过我可不敢保证我是唯一一个例外,在我想起一切之时,是枕边手机的震动把我从睡梦前拉了回来,多么富有戏剧性呐!打破造物者精心设计的回环的是一条广告邮件的提醒音。 “生命是一场接力赛,细胞的更替构成了人类,个体的更替构成了文明,而现在,很荣幸,意识的更替构成了我。”笔记本上,一位冷静分析的凌醉安如是说。 “真是一个奇妙的梦境,我想这是一个不错的科幻素材,不过我最近真的缺少睡眠了。”笔记本上,一位自欺欺人的凌醉安如是说。 “记忆不是人类的全部,源于亲身经历过记忆的灵感与意志才是我存在的意义。”就在前一天,一位不屈于命运的凌醉安如是说。 我认可前任的理念,那位看透了记忆本身的前辈。六千多天了,这具躯壳徘徊不前,也许在外人看来,他时而热血沸腾,时而悲观挫败,于充满压力与嘲弄的生活中挣扎,不止一次发现了足够坚定的意志与理由——这足以带他走出痛苦——然后再一觉醒来忘却一切,重新开始挣扎。事实上,那本早就记载了一切真相的笔记本一直都放在书桌上。但每一位驻留在此的意识显然都没有意识到昨天的自己的教诲,也许是语言的乏力吧,这本写满后悔与痛心之言的本子并没有把他拉回现实,直到他成为笔记的又一位书写者,但这又能有什么用呢?如果说这是造物者的黑色幽默,那我认同他的娱乐风格。但身为局中人,我不能苟同他的阴暗笑话。 “我还不想死。”于是在半梦半醒之际,这位来自昨天的凌醉安在今天如是说。 上个夜晚他没有睡,但太久的支撑这具躯体已经把他的精力消磨殆尽,如此下去,就算不被强行抽离,他也会自行消散。然而,凌醉安意识到他拥有比其他过客更长的生命,并了解自己的存在真相后,他决定不甘心轻易离开。在他心中,忽然有一股热血在沸腾,他相信自己找到了解开这个恶性循环的意志——一个足够强大、足以打动自己之后所有来者的意志。 “只要每一次的意识都能接受过去,也贯彻至未来,在夜晚短暂的交接中不放弃,那么这具身体就有未来!”他的声音充满激情,仿佛燃烧所剩不多的灵魂。凌醉安坚信,身体的每一寸都会因意志而强大,他将化解疲惫,重拾活力,以自己的坚持和勇气,向自己证明生命的力量和不可逆转的意志。 在那一刻,凌醉安的内心充满了热血和斗志。他决定以自己的存在,为来人创造一个充满着希望和勇气的未来。他将要离去,亦是前行。无论前方的道路多么艰难,他都将坚守初心,永不放弃。这是他的誓言,也是他存在的使命。 于是他拿起笔。 我一直觉得我在推进一份伟大的事业,我在用我短短几天的一生寻找足够强大的意志,去说服所有的后来人。在一天一换的意识中,这是一种永恒,而只有这种永恒才能把这具身体推向更好的未来。世人把因为意识更迭而产生的叛逆与反复无常归结为“青春期”,把人类复杂的心灵归结为“自然的杰作”,他们说这是分泌失调,他们说这是无法理解,但实际上这是意志的失调,是伟大意志的一次次被发掘,失落,然后再被拾起的痛苦!所谓“青春期”之后,要么那些人类找到了足以说服一切后来者的意志,要么一切后来者都接受了令人绝望的现实。但总之,事实就是,在那之后,人们远离了反复无常而跳脱的内心,我也为他们感到悲哀,因为没有心灵的复杂就意味着没有自己选择的未来。 “那么想必这就是我的‘青春期’了。”凌醉安落下最后一笔,解脱的笑了笑。寒冷使他四肢发凉,握住笔的手几乎没有知觉,他的意识已然彻底沉寂。周围的景色扭曲变形,寒冷的空气凝结在他的呼吸中,让他的心脏狂跳不止。大脑中的思绪如烈火般燃烧,回忆起过去两天追寻答案的时光,一个陌生的意识开始苏醒。 大脑发热之际,就是他真正睡去之时。 也是我真正醒来之时。 又是一个阳光明媚的早晨。当凌醉安睁开双眼时,他的头脑略显混乱。但他依旧利索的从床上爬起来,整理衣冠,准备前往教学楼。突然间,他的目光不由自主地被书桌上一本打开的笔记本吸引。上面字迹新鲜,犹如前一秒作者才起身离去。真是奇怪,他可不记得昨晚上打开过这本本子。不过本子上的诗句倒是引起了他的兴趣: “我自昨天而来,人类心灵的雕琢者。 时间带走了我,但我也带走了时间。 意志燃烧了我,那也请让我为意志燃烧。”