嘿!你也来看码农又在写啥BUG了吗
SMART 警告响了一周:NAS 掉盘后,ChatGPT 给我一颗定心丸
这块希捷酷狼硬盘的 SMART 错误,可能已经发生一周了,但我一直没发现。
直到这两天,照片备份开始出问题,我才意识到不对劲,跑去 QNAP 后台看了一眼:SMART 警告明晃晃地挂在那里。
而且第一次我看到报错的时候,它其实还能读。我当时没太当回事,也没立刻把数据拷出来,心里还在自我安慰:也许只是“提醒一下”,不至于这么快就出大事。
后来我做了什么:查坏道、重启,然后它直接掉盘
我当时的思路很简单:先让 NAS 查找坏道,看看能不能确认问题到底有多严重。
结果它查了半天也没反应,我就开始重启、再重启,想着“重启一下可能就好了”。
最后的结果也很直观:硬盘直接掉盘,状态变成 disconnect。
那一刻我终于确认了一件事:这已经不是“排查”了,这是“救援”。
我去问 ChatGPT:要不要拔盘?能不能接 Mac 读?
如果是以前,我大概率会在网上搜很久:搜 SMART 报错、搜 QNAP 掉盘、搜 macOS 怎么挂载……信息肯定很多,但最后未必能帮我做出决策。
这次我直接把情况一股脑丢给 ChatGPT,问它两件事:
1. 我应该把它从 NAS 里取下来吗?
2. 我有一个 HDD 硬盘读取器,能不能把它接到 Mac 上读数据?
它的建议很明确:先断电拔盘,别再让它在 NAS 里反复上电掉线;可以接 Mac 试读,但尽量减少对源盘的写入和折腾。
我照做了:NAS 断电,把硬盘取下来,接上读取器,再插到 Mac 上。
Mac 看得到盘,但分区表已经丢了
很遗憾,macOS 读不出硬盘内容,还弹了警告提示。
我按 ChatGPT 的提示跑了
它接着建议我用
硬盘是 4TB,但我的 Mac 只有 87GB 空间,手头那块移动硬盘也只有 380GB,不够。
在“没地方放镜像”的前提下,我按 ChatGPT 的建议又尝试了
价格再补一刀,但我的决定是:先缓缓
我去京东查硬盘价格,不查不知道,一查吓一跳:
● 我几年前买的 4TB 硬盘 800 多,现在涨到快 1000
● 我买的移动硬盘 400 多,现在也涨到 800 多
于是我又问 ChatGPT:为什么硬盘涨价?有没有机会降?
它的解释大意是 AI 的冷存储需求在增长、HDD 厂商高度集中、再叠加产能和供需因素,价格就被推上去了;至于回落,它的结论是:短期(比如 1~3 个月)基本别指望。
最后我的决定是:硬盘购置也暂缓。毕竟现在经济不好,旧盘里的东西我也不急着用,我先把这块盘离线放好,等我真的需要它的时候,再按“先找落脚地 → 再用
ChatGPT 没有把我的硬盘救活,但它给了我一颗定心丸:不用在网上翻一晚上也不一定有结论,我至少知道接下来该怎么做、先做什么、别做什么。
via 愆伏
这块希捷酷狼硬盘的 SMART 错误,可能已经发生一周了,但我一直没发现。
直到这两天,照片备份开始出问题,我才意识到不对劲,跑去 QNAP 后台看了一眼:SMART 警告明晃晃地挂在那里。
而且第一次我看到报错的时候,它其实还能读。我当时没太当回事,也没立刻把数据拷出来,心里还在自我安慰:也许只是“提醒一下”,不至于这么快就出大事。
后来我做了什么:查坏道、重启,然后它直接掉盘
我当时的思路很简单:先让 NAS 查找坏道,看看能不能确认问题到底有多严重。
结果它查了半天也没反应,我就开始重启、再重启,想着“重启一下可能就好了”。
最后的结果也很直观:硬盘直接掉盘,状态变成 disconnect。
那一刻我终于确认了一件事:这已经不是“排查”了,这是“救援”。
我去问 ChatGPT:要不要拔盘?能不能接 Mac 读?
如果是以前,我大概率会在网上搜很久:搜 SMART 报错、搜 QNAP 掉盘、搜 macOS 怎么挂载……信息肯定很多,但最后未必能帮我做出决策。
这次我直接把情况一股脑丢给 ChatGPT,问它两件事:
1. 我应该把它从 NAS 里取下来吗?
2. 我有一个 HDD 硬盘读取器,能不能把它接到 Mac 上读数据?
它的建议很明确:先断电拔盘,别再让它在 NAS 里反复上电掉线;可以接 Mac 试读,但尽量减少对源盘的写入和折腾。
我照做了:NAS 断电,把硬盘取下来,接上读取器,再插到 Mac 上。
Mac 看得到盘,但分区表已经丢了
很遗憾,macOS 读不出硬盘内容,还弹了警告提示。
我按 ChatGPT 的提示跑了
diskutil list,确实能看到硬盘本体,但分区表已经丢失——你知道它在那,但系统不知道该怎么走进去。它接着建议我用
ddrescue 把硬盘里的数据先导到另外一个地方。我当时理解它的核心意思就是:先把“还能读到的东西”抓出来,后面的恢复尽量在副本上做。ddrescue 卡在现实:我没有 4TB 的落脚地硬盘是 4TB,但我的 Mac 只有 87GB 空间,手头那块移动硬盘也只有 380GB,不够。
在“没地方放镜像”的前提下,我按 ChatGPT 的建议又尝试了
testdisk 和 photorec,但不是没起作用,就是恢复出来的东西太难整理。折腾了一圈,我选择先停下来。价格再补一刀,但我的决定是:先缓缓
我去京东查硬盘价格,不查不知道,一查吓一跳:
● 我几年前买的 4TB 硬盘 800 多,现在涨到快 1000
● 我买的移动硬盘 400 多,现在也涨到 800 多
于是我又问 ChatGPT:为什么硬盘涨价?有没有机会降?
它的解释大意是 AI 的冷存储需求在增长、HDD 厂商高度集中、再叠加产能和供需因素,价格就被推上去了;至于回落,它的结论是:短期(比如 1~3 个月)基本别指望。
最后我的决定是:硬盘购置也暂缓。毕竟现在经济不好,旧盘里的东西我也不急着用,我先把这块盘离线放好,等我真的需要它的时候,再按“先找落脚地 → 再用
ddrescue → 必要时上新盘/找专业恢复”的路线走。ChatGPT 没有把我的硬盘救活,但它给了我一颗定心丸:不用在网上翻一晚上也不一定有结论,我至少知道接下来该怎么做、先做什么、别做什么。
via 愆伏
油条豆腐脑,总结要趁早|我的2025年度小记
2025年最后一个周六,我起来的比平时要晚很多,八点多我驱车来到离家不到二里地的早市觅食,嗯?这么近为啥要开车?因为太冷了!体感温度大约-25°左右,东北的三九天是真冷啊!用我们这的方言说:这天儿,嘎嘎地冷🥶。
via 碎言 - SuiYan Blog (author: J.sky)
2025年最后一个周六,我起来的比平时要晚很多,八点多我驱车来到离家不到二里地的早市觅食,嗯?这么近为啥要开车?因为太冷了!体感温度大约-25°左右,东北的三九天是真冷啊!用我们这的方言说:这天儿,嘎嘎地冷🥶。
via 碎言 - SuiYan Blog (author: J.sky)
这次从词、曲到剪辑,又有了全方位提升~
MV 完整版+彩蛋
https://www.bilibili.com/video/BV1iiBkBGEkU/
via 农码生涯,无酒无花 – The coding life, no wine, no shine. (author: nicrosoft)
Invalid media: video
谷歌自身正是通过未经许可抓取网络数据建立起整个商业帝国。如今却欲援引版权法中最遭滥用的条款,阻止他人从事与谷歌崛起之初如出一辙的行为。
via TecHug (author: techug)
Valine评论系统上线,竟然这么多坑...
思来想去我的博客需要一个评论系统,一开始本来想用Waline,但是部署在Vercel的访问速度和不知为何加载不了评论的问题,所以改用了它的姐姐
没想到这是另一个噩梦的开始。
不全面的配置文档
快速开始 Valine 一款快速、简洁且高效的无后端评论系统
按照官方文档的引用方式,根本无法正常使用。
文档教程中缺少了极为关键的
LeanCloud 国际版共享域名不再向中国大陆提供服务
原文链接
最抽象的一集来了,我大晚上用电脑看评论发评论好好的,但是手机不行。
一开始怀疑是不是手机上js兼容性问题,结果偶然打开了VPN,评论系统正常使用。
于是才找到了这篇文章。
换用中国版的LeanCloud,创建应用,替换掉之前的配置,评论系统终于可以在国内网络环境下正常使用了。
Valine-Admin-Server配置
你说得对,但是但是Valine是一个
你说的不对,中国版的LeanCloud云引擎不提供共享域名,你需要使用自己的域名(已备案),对于我这种懒汉来说这里麻烦一点。
Valine-Admin-Server-unity
我fork了原项目,把应用凭证相关的内容改成了从环境变量读取。
将该项目部署到国际版LeanCloud云引擎上,设置环境变量,即可通过国际版自带的共享域名来访问后端。
但是这样做会导致原本的云函数和邮件通知等功能无法正常使用。
没有关系,我们可以再使用中国版的LeanCloud云引擎来部署该项目,虽然没有域名不能访问后端,但是可以正常发送邮件。
至此,评论系统终于可以正常使用了。
via 重生云
思来想去我的博客需要一个评论系统,一开始本来想用Waline,但是部署在Vercel的访问速度和不知为何加载不了评论的问题,所以改用了它的姐姐
Valine。光是写css就花了我好长时间qwqValine相对Waline来说更加危险,但是我的数据也不值钱啊,不管了。
没想到这是另一个噩梦的开始。
不全面的配置文档
快速开始 Valine 一款快速、简洁且高效的无后端评论系统
按照官方文档的引用方式,根本无法正常使用。
<!-- 官方的引用方式 -->
<script src='//unpkg.com/valine/dist/Valine.min.js'></script>
<div id="vcomments"></div>
<script>
new Valine({
el: '#vcomments',
appId: 'Your appId',
appKey: 'Your appKey'
})
</script>
文档教程中缺少了极为关键的
leancloud-storage相关js引用和serverURLs的配置。正确的配置方法如下:<!-- 正确的引用方式 -->
<script src="https://unpkg.com/[email protected]/dist/av-min.js"></script>
<script src='https://unpkg.com/valine/dist/Valine.min.js'></script>
<div id="vcomments"></div>
<script>
new Valine({
el: '#vcomments',
appId: 'Your appId',
appKey: 'Your appKey',
serverURLs: 'https://your-server-url',
avatar_cdn: 'https://weavatar.com/avatar/'<!--推荐使用weavatar作为头像CDN-->
});
</script>
LeanCloud 国际版共享域名不再向中国大陆提供服务
原文链接
最抽象的一集来了,我大晚上用电脑看评论发评论好好的,但是手机不行。
一开始怀疑是不是手机上js兼容性问题,结果偶然打开了VPN,评论系统正常使用。
于是才找到了这篇文章。
换用中国版的LeanCloud,创建应用,替换掉之前的配置,评论系统终于可以在国内网络环境下正常使用了。
Valine-Admin-Server配置
你说得对,但是但是Valine是一个
没有后端的评论系统,但是你可以利用LeanCloud的云引擎搭配Valine-Admin-Server来实现一个简单的管理后台。你说的不对,中国版的LeanCloud云引擎不提供共享域名,你需要使用自己的域名(已备案),对于我这种懒汉来说这里麻烦一点。
Valine-Admin-Server-unity
我fork了原项目,把应用凭证相关的内容改成了从环境变量读取。
将该项目部署到国际版LeanCloud云引擎上,设置环境变量,即可通过国际版自带的共享域名来访问后端。
但是这样做会导致原本的云函数和邮件通知等功能无法正常使用。
[2025-12-27T08:14:08.063000000Z][system] 已忽略云函数和 Hook,原因: 云函数 API 响应码为 401,请确认加载了云引擎中间件并正确配置 appId/appKey
没有关系,我们可以再使用中国版的LeanCloud云引擎来部署该项目,虽然没有域名不能访问后端,但是可以正常发送邮件。
至此,评论系统终于可以正常使用了。
via 重生云
Arch核显下如何玩愉快玩Dota2和CS2
闲暇的时候,会来几局 dota2 或者 cs2,截止 steam 上统计显示 dota2 游戏时间总计:6221 小时,Counter-Strike 2 游戏总时间 357 小时。cs2 玩得少主要是菜,只玩娱乐模式,见面对枪就被暴打、常年 tab 键排名倒数 1-4 名,局伤 35 左右😅;dota2 最近苦练卡尔和米波,鸟局玩起来很快乐的。
阅读更多
via mephisto.cc
闲暇的时候,会来几局 dota2 或者 cs2,截止 steam 上统计显示 dota2 游戏时间总计:6221 小时,Counter-Strike 2 游戏总时间 357 小时。cs2 玩得少主要是菜,只玩娱乐模式,见面对枪就被暴打、常年 tab 键排名倒数 1-4 名,局伤 35 左右😅;dota2 最近苦练卡尔和米波,鸟局玩起来很快乐的。
阅读更多
via mephisto.cc
Java进阶知识,包括并发编程,NIO等
BlockingQueue
BlockingQueue 是 Java 中的一个接口,它代表了一个线程安全的队列,不仅可以由多个线程并发访问,还添加了等待/通知机制,以便在队列为空时阻塞获取元素的线程,直到队列变得可用,或者在队列满时阻塞插入元素的线程,直到队列变得可用。
阻塞队列(BlockingQueue)被广泛用于“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。
BlockingQueue 继承了 Queue 接口,因此,BlockingQueue 也具有 Queue 接口的基本操作:
Queue接口提供方法,
插入元素
1. add 将元素添加到队列尾部,如果队列满了,则抛出异常 IllegalStateException。
2. offer 将元素添加到队列尾部,如果队列满了,则返回 false
删除元素
1.
2.
查找元素
1.
2.
除了从 Queue 接口 继承到一些方法,BlockingQueue 自身还定义了一些其他的方法,比如说插入操作:
1.
2.
比如说删除操作:
1.
2.
ArrayBlockingQueue
BlockingQueue 接口的实现类有 ArrayBlockingQueue、DelayQueue、LinkedBlockingDeque、LinkedBlockingQueue、LinkedTransferQueue、PriorityBlockingQueue、SynchronousQueue 等
ArrayBlockingQueue 它是一个基于数组的有界阻塞队列:
● 有界:ArrayBlockingQueue 的大小是在构造时就确定了,并且在之后不能更改。这个界限提供了流量控制,有助于资源的合理使用。
● FIFO:队列操作符合先进先出的原则。
● 当队列容量满时,尝试将元素放入队列将导致阻塞;尝试从一个空的队列取出元素也会阻塞。
via Sekyoro的博客小屋
BlockingQueue
BlockingQueue 是 Java 中的一个接口,它代表了一个线程安全的队列,不仅可以由多个线程并发访问,还添加了等待/通知机制,以便在队列为空时阻塞获取元素的线程,直到队列变得可用,或者在队列满时阻塞插入元素的线程,直到队列变得可用。
阻塞队列(BlockingQueue)被广泛用于“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。
BlockingQueue 继承了 Queue 接口,因此,BlockingQueue 也具有 Queue 接口的基本操作:
Queue接口提供方法,
插入元素
1. add 将元素添加到队列尾部,如果队列满了,则抛出异常 IllegalStateException。
2. offer 将元素添加到队列尾部,如果队列满了,则返回 false
删除元素
1.
boolean remove(Object o):从队列中删除元素,成功返回true,失败返回false2.
E poll():检索并删除此队列的头部,如果此队列为空,则返回null查找元素
1.
E element():检索但不删除此队列的头部,如果队列为空时则抛出 NoSuchElementException 异常;2.
peek():检索但不删除此队列的头部,如果此队列为空,则返回 null.除了从 Queue 接口 继承到一些方法,BlockingQueue 自身还定义了一些其他的方法,比如说插入操作:
1.
void put(E e):将元素添加到队列尾部,如果队列满了,则线程将阻塞直到有空间。2.
offer(E e, long timeout, TimeUnit unit):将指定的元素插入此队列中,如果队列满了,则等待指定的时间,直到队列可用。比如说删除操作:
1.
take():检索并删除此队列的头部,如有必要,则等待直到队列可用;2.
poll(long timeout, TimeUnit unit):检索并删除此队列的头部,如果需要元素变得可用,则等待指定的等待时间。ArrayBlockingQueue
BlockingQueue 接口的实现类有 ArrayBlockingQueue、DelayQueue、LinkedBlockingDeque、LinkedBlockingQueue、LinkedTransferQueue、PriorityBlockingQueue、SynchronousQueue 等
ArrayBlockingQueue 它是一个基于数组的有界阻塞队列:
● 有界:ArrayBlockingQueue 的大小是在构造时就确定了,并且在之后不能更改。这个界限提供了流量控制,有助于资源的合理使用。
● FIFO:队列操作符合先进先出的原则。
● 当队列容量满时,尝试将元素放入队列将导致阻塞;尝试从一个空的队列取出元素也会阻塞。
via Sekyoro的博客小屋
鸿蒙PC Matebook Pro上安装仓颉编译器每日构建版
准备工作
● 在鸿蒙PC上使用应用商店安装CodeArts IDE
● 下载仓颉编译器每日构建版本: cangjie-sdk-ohos-aarch64-1.1.0-alpha.2025xxxxxxxxxxxxx.tar.gz
从CodeArts IDE提取签名工具
打开IDE, 随便创建一个项目打开,在终端执行以下命令
最后在
安装仓颉编译器
● 把下载的仓颉编译器复制到个人目录(文件管器和下载目录同级)
● 打开终端解压
● 打开
● 把以下脚本保存为
● 在终端切换到
● 切换到
使用仓颉编译器
现在就可以按仓颉教程的两种方法使用仓颉了
● 第一种,临时使用 ● 打开终端
● 第二种,永远使用 ● 把
编译并执行项目
● 写一个
● 编译
● 签名
● 授权
● 执行
via 东方星痕
准备工作
● 在鸿蒙PC上使用应用商店安装CodeArts IDE
● 下载仓颉编译器每日构建版本: cangjie-sdk-ohos-aarch64-1.1.0-alpha.2025xxxxxxxxxxxxx.tar.gz
从CodeArts IDE提取签名工具
打开IDE, 随便创建一个项目打开,在终端执行以下命令
1
2
3
4
5
6
7
8
cp /data/app/toolchains.org/toolchains_1.0/lib//binary-sign-tool .
binary-sign-tool sign -inFile "./binary-sign-tool" -outFile "./binary-sign-tool-signed" -selfSign 1
chmod +x binary-sign-tool-signed
./binary-sign-tool-signed
# 复制到用户安装目录
mkdir -p ~/.local/bin
cp ./binary-sign-tool-signed ~/.local/bin/binary-sign-tool
最后在
~/.zshrc添加export PATH=$HOME/.local/bin:$PATH安装仓颉编译器
● 把下载的仓颉编译器复制到个人目录(文件管器和下载目录同级)
● 打开终端解压
tar -xzf cangjie-sdk-ohos-aarch64-1.1.0-alpha.2025xxxxxxxxxxxxx.tar.gz 换自己下载的版本● 打开
cangjie/envsetup.sh把首行的#!/bin/bash换成#!/bin/sh● 把以下脚本保存为
sign-cangjie.sh并复制到cangjie目录下和envsetup.sh同级 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/bin/sh
# 递归查询当前目录及其子目录下的所有文件
find . -type f | while read -r file; do
# 使用 file 命令检查文件类型
if file "$file" | grep "shared object"; then
echo "Found executable or shared object: $file"
# 确保文件具有可执行权限
chmod +x "$file"
# 签名文件
echo "Signing file: $file"
binary-sign-tool sign -inFile "$file" -outFile "$file" -selfSign 1
fi
done● 在终端切换到
cangjie目录下,执行chmod +x sign-cangjie.sh 并执行 ./sign-cangjie.sh● 切换到
third_party/llvm/bin 目录执行 rm ld.lld && cp lld ld.lld使用仓颉编译器
现在就可以按仓颉教程的两种方法使用仓颉了
● 第一种,临时使用 ● 打开终端
source ~/.cangjie/envsetupo.sh 然后就可以在当前终端窗口执行cjc -v● 第二种,永远使用 ● 把
source $HOME/.cangjie/envsetuo.sh 添加到 ~/.zshrc 里,之后打开的新终端都可以使用仓颉命令了编译并执行项目
● 写一个
hello_world.cj1
2
3main(){
println("你好,仓颉\n你好鸿蒙")
}● 编译
cjc hello_world.cj● 签名
binary-sign-tool sign -inFile "./main" -outFile "./main-signed" -selfSign 1● 授权
chmod +x ./main-signed● 执行
./main-signed , 如无意外就能看到输出了via 东方星痕
让 AI 戴着镣铐跳舞
最近临时在帮朋友做一些外包,基本上代码都是 AI 写的,我想如果不是有 AI, 我大概不会帮这个忙,因为即使这些活不难,我还是要写很多代码。但现在,我可以一个人同时做 2-3 个项目。
在这个过程中,更加让我确定了对于程序员来说,软件开发的范式已经彻底彻底改变了。生成代码再也不是程序员「应该」做的事情,而是应该被放手给 AI 做的事。
这也让我对判断一个程序员的能力从代码能力转变成了使用 AI 的能力,我想,如果我现在要为团队招程序员,我会在面试时着重了解这个人如何使用 AI 完成一个需求。
对于程序员来说,「使用 AI 的能力」包含很多维度,这些维度综合起来,才决定 AI 是否真正能成为程序员的杠杆:
对业务的理解
软件是为解决用户的需求而生的,对业务充分理解,才能给 AI 足够的业务场景上下文,才能让 AI 写出覆盖边界条件的代码。
对业务的理解同时决定了程序员是否可以做好数据库建模。在接我朋友的外包项目时,我发现我人工干预最多的就是数据库建模。只要我思考好建模,AI 就能基于这个数据库模型编写任何接口。
对技术栈的理解
如果能让 AI 限定在特定的技术栈中,你会发现 AI 更能稳定发挥,更可控。让 AI 「带着镣铐跳舞」。无论用什么技术栈,重点都是给 AI 一条稳定的轨道。比如我在所有项目的 AGENT.md 中都会列出非常细节的选型,例如 CC Mate 的 https://github.com/djyde/ccmate/blob/main/CLAUDE.md
当 AI 知道技术栈后,通过 context7 这样的 MCP, 它能在生成代码时,找到对应的文档作为上下文,生成出更不容易出错的代码。换句话说,确定好技术栈,让 AI 成为这个技术栈的专家为你编写代码。
因此,在这个层面,程序员的「使用 AI 的能力」意味着,这个程序员知道什么样的场景适合什么样的技术栈,也侧面反映了这个程序员对技术社区是否保持敏锐的嗅觉。这是我认为 AI 时代程序员的一种硬实力。
对架构的理解
在《代码之外》听友线下见面会中,有听友提问,在 vibe coding 的时候,AI 只能做些一次性的软件,多次迭代后就会变成灾难。我的回答是,这是因为没有给 AI 提供一个你设计好的工程架构,让他在这个架构中行动。在这个新的时代,程序员应该以架构师的角度来工作。
我在 AI coding 一个项目前,我的脑海里会大概有一个工程架构的设计,比如,通用工具应该被统一放到一个什么文件,前端页面应该如何组织,接口应该遵循什么样的规范,错误处理应该怎么做等等。只要架构设计好,写在 AGENT.md 中,AI 自然会按照你的设计去做,而不是让 AI 天马行空地发挥。
不仅是在启动这个项目前要做好架构的思考,在维护的过程中,你指挥 AI 完成一个新的需求时,就应该思考完成这个需求的时候,将会有什么代码被写在哪一个地方。这个场景也适合使用各个 AI coding agent 的 Plan Mode 来完成,当 AI 告诉你它将要如何行动时,适当二次确认它要如何组织新的代码。
做到以上三个理解,我相信程序员可以游刃有余地使用 AI. 但我曾经在很多场合接触一些在一线写代码的程序员,发现他们对 AI 的接受程度是如此地低。很大程度上,我认为是一个缺乏以上三个理解的程序员,很难对 AI 建立信任关系,合作关系。
和我合作的一位程序员,在共同完成一个需求的时候,我在他旁边观察了一下他如何使用 AI, 结果只是非常浅地使用 auto complete. 我问他,为什么不尝试让 AI 完整地完成这个需求,他表示他认为 AI 不能胜任这个任务。
我说:
1. 我的后端接口已经写好了,而且有了 openapi 的 YAML 文件(AI 生成的)
2. 你知道这个需求涉及前端的哪个页面,在前端项目中,也有对数据请求层进行封装(AI 一定能知道怎么写数据请求)
满足了这两个条件,你只需要把接口文档给 AI, 然后告诉 AI 这次的需求,再告诉 AI 一点提示,大概是在哪个文件中修改。以现在旗舰模型的能力,AI 大概率能一次性完成。
他将信将疑,我直接在他电脑上给他演示这个操作,果然,AI 直接完美地完成了这个需求,不到 2 分钟。
而同时我也在思考,到底 AI 时代是否还需要程序员,或说需要怎样的程序员,好像渐渐有了答案。
via Randy's Blog
最近临时在帮朋友做一些外包,基本上代码都是 AI 写的,我想如果不是有 AI, 我大概不会帮这个忙,因为即使这些活不难,我还是要写很多代码。但现在,我可以一个人同时做 2-3 个项目。
在这个过程中,更加让我确定了对于程序员来说,软件开发的范式已经彻底彻底改变了。生成代码再也不是程序员「应该」做的事情,而是应该被放手给 AI 做的事。
这也让我对判断一个程序员的能力从代码能力转变成了使用 AI 的能力,我想,如果我现在要为团队招程序员,我会在面试时着重了解这个人如何使用 AI 完成一个需求。
对于程序员来说,「使用 AI 的能力」包含很多维度,这些维度综合起来,才决定 AI 是否真正能成为程序员的杠杆:
对业务的理解
软件是为解决用户的需求而生的,对业务充分理解,才能给 AI 足够的业务场景上下文,才能让 AI 写出覆盖边界条件的代码。
对业务的理解同时决定了程序员是否可以做好数据库建模。在接我朋友的外包项目时,我发现我人工干预最多的就是数据库建模。只要我思考好建模,AI 就能基于这个数据库模型编写任何接口。
对技术栈的理解
如果能让 AI 限定在特定的技术栈中,你会发现 AI 更能稳定发挥,更可控。让 AI 「带着镣铐跳舞」。无论用什么技术栈,重点都是给 AI 一条稳定的轨道。比如我在所有项目的 AGENT.md 中都会列出非常细节的选型,例如 CC Mate 的 https://github.com/djyde/ccmate/blob/main/CLAUDE.md
当 AI 知道技术栈后,通过 context7 这样的 MCP, 它能在生成代码时,找到对应的文档作为上下文,生成出更不容易出错的代码。换句话说,确定好技术栈,让 AI 成为这个技术栈的专家为你编写代码。
因此,在这个层面,程序员的「使用 AI 的能力」意味着,这个程序员知道什么样的场景适合什么样的技术栈,也侧面反映了这个程序员对技术社区是否保持敏锐的嗅觉。这是我认为 AI 时代程序员的一种硬实力。
对架构的理解
在《代码之外》听友线下见面会中,有听友提问,在 vibe coding 的时候,AI 只能做些一次性的软件,多次迭代后就会变成灾难。我的回答是,这是因为没有给 AI 提供一个你设计好的工程架构,让他在这个架构中行动。在这个新的时代,程序员应该以架构师的角度来工作。
我在 AI coding 一个项目前,我的脑海里会大概有一个工程架构的设计,比如,通用工具应该被统一放到一个什么文件,前端页面应该如何组织,接口应该遵循什么样的规范,错误处理应该怎么做等等。只要架构设计好,写在 AGENT.md 中,AI 自然会按照你的设计去做,而不是让 AI 天马行空地发挥。
不仅是在启动这个项目前要做好架构的思考,在维护的过程中,你指挥 AI 完成一个新的需求时,就应该思考完成这个需求的时候,将会有什么代码被写在哪一个地方。这个场景也适合使用各个 AI coding agent 的 Plan Mode 来完成,当 AI 告诉你它将要如何行动时,适当二次确认它要如何组织新的代码。
做到以上三个理解,我相信程序员可以游刃有余地使用 AI. 但我曾经在很多场合接触一些在一线写代码的程序员,发现他们对 AI 的接受程度是如此地低。很大程度上,我认为是一个缺乏以上三个理解的程序员,很难对 AI 建立信任关系,合作关系。
和我合作的一位程序员,在共同完成一个需求的时候,我在他旁边观察了一下他如何使用 AI, 结果只是非常浅地使用 auto complete. 我问他,为什么不尝试让 AI 完整地完成这个需求,他表示他认为 AI 不能胜任这个任务。
我说:
1. 我的后端接口已经写好了,而且有了 openapi 的 YAML 文件(AI 生成的)
2. 你知道这个需求涉及前端的哪个页面,在前端项目中,也有对数据请求层进行封装(AI 一定能知道怎么写数据请求)
满足了这两个条件,你只需要把接口文档给 AI, 然后告诉 AI 这次的需求,再告诉 AI 一点提示,大概是在哪个文件中修改。以现在旗舰模型的能力,AI 大概率能一次性完成。
他将信将疑,我直接在他电脑上给他演示这个操作,果然,AI 直接完美地完成了这个需求,不到 2 分钟。
而同时我也在思考,到底 AI 时代是否还需要程序员,或说需要怎样的程序员,好像渐渐有了答案。
via Randy's Blog
锁车音效分享下载 - 特斯拉/宝马/比亚迪/深蓝/领克/极氪等提示音一键下载
锁车音效分享
下载地址
夸克网盘:https://pan.quark.cn/s/132ee25fbf2d?pwd=1MFd 密码:1MFd
via 游魂博客
Invalid media:
image
image
image
image
image
免费下载锁车音效,打造个性化汽车提示音!涵盖特斯拉、宝马、奥迪、领克、极氪、深蓝等热门车型,支持自定义提示音替换。无论是炫酷科技音、经典原厂声,还是趣味创意音效,这里都能满足您的需求,让每一次锁车都与众不同!
锁车音效分享
下载地址
欢迎分享,持续更新中…U C 网盘:https://drive.uc.cn/s/393701977e884 密码:1kit
夸克网盘:https://pan.quark.cn/s/132ee25fbf2d?pwd=1MFd 密码:1MFd
via 游魂博客
Invalid media:
image
image
image
image
image
感染水痘记(上)
没想到自己四十岁了,在2025年最后一个月,竟然感染了水痘。
第一天:低烧身体不适
周末感觉全身肌肉关节酸痛,发冷恶心,身体各处还会随机抽痛。中午裹着三层棉被、抱着热水袋睡了一觉,醒来觉得头晕难受又躺下了,量了几次体温将近38度。夜里一直发热出汗、做梦不断,以为是被传染感冒。回想前几天就已经有精神萎靡、嗜睡的感觉。
第二天:持续恶心反胃
早上起床感觉精神好一些,送两个娃上学后,便去上班了。临走前照镜子发现脸上冒出几颗陌生的红痘,位置比较对称,不小心碰破了,还有些流水,以为是上火,没放在心上。到了单位有同事问我,是不是身体不舒服,看着脸色不太对。一整天仍旧持续反胃,中午和晚上吃不下任何东西,闻到饭菜的味道就恶心,和以往怀孕早期的症状很相似,当时又一度怀疑是意外怀孕了。
第三天:确诊感染水痘
早上照镜子看到脸上和身体的红痘比昨天多了,而且随着时间推移,到中午越来越多,有的红痘中间是透明水状,凭经验判断和之前发烧感冒引发的急性荨麻疹的症状不同,反复上网查询,怀疑是水痘。下午便赶紧去医院皮肤科,医生检查后确诊为水痘,并登记我的身份证信息和工作单位上报给省系统。因为水痘有极强传染性,需要隔离休息两周。
从医院回家后火速收拾衣服和生活用品,直接搬出去隔离,两个娃放学后住到爷爷奶奶家。家里所有的床单被褥衣物都清洗晾晒,房间喷洒酒精消毒。hillway出差在外,得知情况后,给两个娃预约去接种水痘疫苗,每剂200多元。根据网络资料,接种水痘疫苗后,一般在2周左右开始产生有效免疫力,全程规范接种(通常为2剂)后,免疫力会更持久。而水痘的潜伏期通常为 10-24天,多数情况下集中在 14-16天。虽然两个娃接种时间有些晚,但希望也能起到一些降低发病风险,或感染后减轻症状、缩短病程的作用。
治疗水痘,医生给我开具了两种药:明竹欣盐酸伐昔洛韦片(三盒,每天两次,每次一片0.3g),久邦阿昔洛韦乳膏3%10g(两支,每天四次)。我自己隔离在房间里,一边忍着全身瘙痒吃药,一边担心两个娃,惴惴不安,祈祷她们不要被传染。
外用的药膏每隔2个小时左右涂抹一次,脱光衣服对着镜子,给每个水痘抹一遍,由于水痘数量比较多,一次涂抹就几乎就用完了一支。南方的12月,脱光衣服抹药这段时间还是比较冷,而且那些水痘一遇冷空气,就更觉得瘙痒加剧。为了防止抓挠身体水痘破损,把指甲全部剪短,又把上衣塞到裤子里,强忍着不把手伸进去。
第四天:水痘更加密集
全身和脸上水痘的数量第三天相比,更加密集了,头皮里摸上去也有水痘,夜里被全身瘙痒和燥热扰得频频醒来,脸部红肿一片。镜子里的自己,就像一只癞蛤蟆。
更难受的是脸上(眼睛附近)最先长出来又被碰破的一颗水痘,前几天洗脸碰水又接触护肤品,可能感染了,又红又肿,还有些化脓,持续一阵阵刺痛,并牵连到左边眼睛,又肿又疼,有些睁不开。最初脖子那颗被摸破的水痘,也一阵阵的疼。试着涂抹莫匹沙星百多邦乳膏消炎,一整天没有缓解的迹象,仍旧红肿,刺痛不断。
感染后这段时间都没有什么食欲,嗓子貌似也有颗水痘,和一颗恒牙一起疼起来,加上脸颊发炎的水痘和眼睛也是疼的,而身体其他到处又十分瘙痒,两种感觉交织叠加,十分痛苦煎熬。临睡前试着吃开瑞坦氯雷他定片,平时治疗荨麻疹,服药后半小时左右见效,而这次煎熬等待了两三个小时,全身还是瘙痒难耐,没有什么作用。
第五天:水痘未明显增加
起床后抱着开盲盒的心态照镜子,发现身体的水痘没有再明显增加了。相对来说,脸部、脖颈、前胸、肚皮和后背的水痘比较密集,胳膊和腿部的相对少一些。左眼下方红肿发炎的区域似乎缩小一些,但是还是有些刺痛,又有点痒,眼睛还是有些肿,不太舒服,总是时不时拿起镜子看看,忧心忡忡。嗓子和牙齿还是继续疼,嘴皮发干。
身体长出的水痘有先有后,照镜子发现呈现的状态也不同,有些还是新萌发的红包(斑丘疹),有些红痘中间发展为水泡(疱疹),也有些水泡颜色从透明变成了浑浊。心里盼望全部尽快结痂,摆脱传染性的困扰,早日回家。
第六天:脸颊红肿褪去
早上起床看到左眼还是有些肿,但不怎么疼了。眼睛下方红肿面积继续缩小,也不再刺痛,还有些痒。整个脸不像第四天那么红肿了,脸色慢慢趋于正常。嗓子和牙齿的疼痛感减轻。夜里睡觉还是感觉到处瘙痒,虽然想忍住不去抓,但还是没法完全忍住。
关于水痘,老家的说法是不能吹风,不能见陌生人,用香菜煮水洗澡,还要要用豆腐香菜煮汤喝,把水痘都激发出来。印象中自己小时候得了一次水痘,记得小蜜瓜骑车载我从东大桥回家,一路上用围巾把脑袋蒙住,至于回家后什么症状,多久恢复等情况,完全没有记忆了。好像我以前也没接种过水痘疫苗。
第七天:脸颊黑疤凹陷
脸上和身体的水痘没有明显变化,仍旧瘙痒难耐。嗓子还是不太舒服,也没有什么食欲。
眼睛下方还是红肿,结的黑疤有黄豆大,凹陷下去,感觉以后掉疤了有一个坑,一想到心里就堵得慌。本来长相就不好看,如今一脸水痘印就更丑了。hillway 安慰我说,反正已经嫁出去了,不用担心毁容。回想以前在学校谈恋爱时,我也没有嫌弃过他那满脑袋满脸的青春痘。
第八天:继续瘙痒难耐
这段时间隔离在房间里,主要精力都在用于忍耐身体的瘙痒不适,无心看书,也无心钩织,大部分时间都在躺着,醒来刷刷短视频。眼睛下方的红肿区域缩小了,眼睛也不再难受。
第九天:部分水痘结痂
全身的水痘还是时不时瘙痒。看网上说水痘不能碰破,要等自然掉疤才不会留下痘印,因此感染后也没敢洗头发洗澡,加之每天多次涂抹阿昔洛韦乳膏,身体到处都是要乳膏里的凡士林,呈现半凝固状态,就更加痒的难受。观察发现有一部分水痘结痂了,颜色从淡黄色到棕褐色不等。
第十天:荨麻疹叠加发作
今天除了水痘的瘙痒,荨麻疹又叠加发作了,晚上临睡前又吃了一颗开瑞坦氯雷他定片,以前服药后半小时左右瘙痒感可以消退,而如今见效很慢,忍耐到凌晨才渐渐睡着。这段时间心情一直低落,总是担心焦虑两个娃,又焦虑自己每况日下的身体健康状况,提不起精神,也更加明白了健康和平安的重要性。
第十一天:左眼又刺痛不适
早上醒来感觉左眼又疼起来,附近区域轻微刺痛,还有些痒,黑疤周围的红肿还未消退,只是面积缩小一些。身体水痘还有一小部分还有变干结疤,全身也还在瘙痒。
第十二天:大部分水痘结痂
又有一些水痘继续结痂了,脸上的水痘变为很多个黑疤,分布在各处,更加明显变丑了。
身上还剩下10颗左右水痘,呈现干瘪状态,等待结痂。脸部和身体还是一阵阵的瘙痒。
最近一年多症状转为轻微偶发的荨麻疹,这几天也总是反反复复发作,几乎每天都要发作两次甚至以上。以前吃一颗开瑞坦氯雷他定片,可确保一周左右不再瘙痒。而近期几次服药,不到一天时间,荨麻疹又卷土重来,怀疑是感染水痘病毒导致身体免疫力低下。查询网络则认为并非一定是长期的免疫力低下,可能是病毒感染后,免疫系统处于应激状态,免疫功能紊乱、免疫应答异常。
解释如下:水痘是由水痘带状疱疹病毒感染引起的,发病和机体免疫防御能力不足有关。频繁发作的荨麻疹多为慢性自发性荨麻疹,其核心机制是免疫功能紊乱(而非单纯低下)。水痘病毒感染可能作为一种“诱因”,打乱身体免疫平衡,免疫系统错误地对自身或环境中的无害物质产生过度应答,导致肥大细胞释放组胺,诱发或加重荨麻疹,引发风团和瘙痒。
via 静风说 (author: Jasmine)
没想到自己四十岁了,在2025年最后一个月,竟然感染了水痘。
第一天:低烧身体不适
周末感觉全身肌肉关节酸痛,发冷恶心,身体各处还会随机抽痛。中午裹着三层棉被、抱着热水袋睡了一觉,醒来觉得头晕难受又躺下了,量了几次体温将近38度。夜里一直发热出汗、做梦不断,以为是被传染感冒。回想前几天就已经有精神萎靡、嗜睡的感觉。
第二天:持续恶心反胃
早上起床感觉精神好一些,送两个娃上学后,便去上班了。临走前照镜子发现脸上冒出几颗陌生的红痘,位置比较对称,不小心碰破了,还有些流水,以为是上火,没放在心上。到了单位有同事问我,是不是身体不舒服,看着脸色不太对。一整天仍旧持续反胃,中午和晚上吃不下任何东西,闻到饭菜的味道就恶心,和以往怀孕早期的症状很相似,当时又一度怀疑是意外怀孕了。
第三天:确诊感染水痘
早上照镜子看到脸上和身体的红痘比昨天多了,而且随着时间推移,到中午越来越多,有的红痘中间是透明水状,凭经验判断和之前发烧感冒引发的急性荨麻疹的症状不同,反复上网查询,怀疑是水痘。下午便赶紧去医院皮肤科,医生检查后确诊为水痘,并登记我的身份证信息和工作单位上报给省系统。因为水痘有极强传染性,需要隔离休息两周。
从医院回家后火速收拾衣服和生活用品,直接搬出去隔离,两个娃放学后住到爷爷奶奶家。家里所有的床单被褥衣物都清洗晾晒,房间喷洒酒精消毒。hillway出差在外,得知情况后,给两个娃预约去接种水痘疫苗,每剂200多元。根据网络资料,接种水痘疫苗后,一般在2周左右开始产生有效免疫力,全程规范接种(通常为2剂)后,免疫力会更持久。而水痘的潜伏期通常为 10-24天,多数情况下集中在 14-16天。虽然两个娃接种时间有些晚,但希望也能起到一些降低发病风险,或感染后减轻症状、缩短病程的作用。
治疗水痘,医生给我开具了两种药:明竹欣盐酸伐昔洛韦片(三盒,每天两次,每次一片0.3g),久邦阿昔洛韦乳膏3%10g(两支,每天四次)。我自己隔离在房间里,一边忍着全身瘙痒吃药,一边担心两个娃,惴惴不安,祈祷她们不要被传染。
外用的药膏每隔2个小时左右涂抹一次,脱光衣服对着镜子,给每个水痘抹一遍,由于水痘数量比较多,一次涂抹就几乎就用完了一支。南方的12月,脱光衣服抹药这段时间还是比较冷,而且那些水痘一遇冷空气,就更觉得瘙痒加剧。为了防止抓挠身体水痘破损,把指甲全部剪短,又把上衣塞到裤子里,强忍着不把手伸进去。
第四天:水痘更加密集
全身和脸上水痘的数量第三天相比,更加密集了,头皮里摸上去也有水痘,夜里被全身瘙痒和燥热扰得频频醒来,脸部红肿一片。镜子里的自己,就像一只癞蛤蟆。
更难受的是脸上(眼睛附近)最先长出来又被碰破的一颗水痘,前几天洗脸碰水又接触护肤品,可能感染了,又红又肿,还有些化脓,持续一阵阵刺痛,并牵连到左边眼睛,又肿又疼,有些睁不开。最初脖子那颗被摸破的水痘,也一阵阵的疼。试着涂抹莫匹沙星百多邦乳膏消炎,一整天没有缓解的迹象,仍旧红肿,刺痛不断。
感染后这段时间都没有什么食欲,嗓子貌似也有颗水痘,和一颗恒牙一起疼起来,加上脸颊发炎的水痘和眼睛也是疼的,而身体其他到处又十分瘙痒,两种感觉交织叠加,十分痛苦煎熬。临睡前试着吃开瑞坦氯雷他定片,平时治疗荨麻疹,服药后半小时左右见效,而这次煎熬等待了两三个小时,全身还是瘙痒难耐,没有什么作用。
第五天:水痘未明显增加
起床后抱着开盲盒的心态照镜子,发现身体的水痘没有再明显增加了。相对来说,脸部、脖颈、前胸、肚皮和后背的水痘比较密集,胳膊和腿部的相对少一些。左眼下方红肿发炎的区域似乎缩小一些,但是还是有些刺痛,又有点痒,眼睛还是有些肿,不太舒服,总是时不时拿起镜子看看,忧心忡忡。嗓子和牙齿还是继续疼,嘴皮发干。
身体长出的水痘有先有后,照镜子发现呈现的状态也不同,有些还是新萌发的红包(斑丘疹),有些红痘中间发展为水泡(疱疹),也有些水泡颜色从透明变成了浑浊。心里盼望全部尽快结痂,摆脱传染性的困扰,早日回家。
第六天:脸颊红肿褪去
早上起床看到左眼还是有些肿,但不怎么疼了。眼睛下方红肿面积继续缩小,也不再刺痛,还有些痒。整个脸不像第四天那么红肿了,脸色慢慢趋于正常。嗓子和牙齿的疼痛感减轻。夜里睡觉还是感觉到处瘙痒,虽然想忍住不去抓,但还是没法完全忍住。
关于水痘,老家的说法是不能吹风,不能见陌生人,用香菜煮水洗澡,还要要用豆腐香菜煮汤喝,把水痘都激发出来。印象中自己小时候得了一次水痘,记得小蜜瓜骑车载我从东大桥回家,一路上用围巾把脑袋蒙住,至于回家后什么症状,多久恢复等情况,完全没有记忆了。好像我以前也没接种过水痘疫苗。
第七天:脸颊黑疤凹陷
脸上和身体的水痘没有明显变化,仍旧瘙痒难耐。嗓子还是不太舒服,也没有什么食欲。
眼睛下方还是红肿,结的黑疤有黄豆大,凹陷下去,感觉以后掉疤了有一个坑,一想到心里就堵得慌。本来长相就不好看,如今一脸水痘印就更丑了。hillway 安慰我说,反正已经嫁出去了,不用担心毁容。回想以前在学校谈恋爱时,我也没有嫌弃过他那满脑袋满脸的青春痘。
第八天:继续瘙痒难耐
这段时间隔离在房间里,主要精力都在用于忍耐身体的瘙痒不适,无心看书,也无心钩织,大部分时间都在躺着,醒来刷刷短视频。眼睛下方的红肿区域缩小了,眼睛也不再难受。
第九天:部分水痘结痂
全身的水痘还是时不时瘙痒。看网上说水痘不能碰破,要等自然掉疤才不会留下痘印,因此感染后也没敢洗头发洗澡,加之每天多次涂抹阿昔洛韦乳膏,身体到处都是要乳膏里的凡士林,呈现半凝固状态,就更加痒的难受。观察发现有一部分水痘结痂了,颜色从淡黄色到棕褐色不等。
第十天:荨麻疹叠加发作
今天除了水痘的瘙痒,荨麻疹又叠加发作了,晚上临睡前又吃了一颗开瑞坦氯雷他定片,以前服药后半小时左右瘙痒感可以消退,而如今见效很慢,忍耐到凌晨才渐渐睡着。这段时间心情一直低落,总是担心焦虑两个娃,又焦虑自己每况日下的身体健康状况,提不起精神,也更加明白了健康和平安的重要性。
第十一天:左眼又刺痛不适
早上醒来感觉左眼又疼起来,附近区域轻微刺痛,还有些痒,黑疤周围的红肿还未消退,只是面积缩小一些。身体水痘还有一小部分还有变干结疤,全身也还在瘙痒。
第十二天:大部分水痘结痂
又有一些水痘继续结痂了,脸上的水痘变为很多个黑疤,分布在各处,更加明显变丑了。
身上还剩下10颗左右水痘,呈现干瘪状态,等待结痂。脸部和身体还是一阵阵的瘙痒。
最近一年多症状转为轻微偶发的荨麻疹,这几天也总是反反复复发作,几乎每天都要发作两次甚至以上。以前吃一颗开瑞坦氯雷他定片,可确保一周左右不再瘙痒。而近期几次服药,不到一天时间,荨麻疹又卷土重来,怀疑是感染水痘病毒导致身体免疫力低下。查询网络则认为并非一定是长期的免疫力低下,可能是病毒感染后,免疫系统处于应激状态,免疫功能紊乱、免疫应答异常。
解释如下:水痘是由水痘带状疱疹病毒感染引起的,发病和机体免疫防御能力不足有关。频繁发作的荨麻疹多为慢性自发性荨麻疹,其核心机制是免疫功能紊乱(而非单纯低下)。水痘病毒感染可能作为一种“诱因”,打乱身体免疫平衡,免疫系统错误地对自身或环境中的无害物质产生过度应答,导致肥大细胞释放组胺,诱发或加重荨麻疹,引发风团和瘙痒。
via 静风说 (author: Jasmine)
技术改变视野
The monitoring task had failed 100 consecutive times. Your subscription to the RSS feed has been deactivated.
To reactivate it, please use the /activate_subs command.
ERROR: Network error (ClientConnectorCertificateError)
The monitoring task had failed 100 consecutive times. Your subscription to the RSS feed has been deactivated.
To reactivate it, please use the /activate_subs command.
ERROR: Network error (ClientConnectorCertificateError)