2025-08-11 08:00:00
上周由于天气太过炎热,不开空调几乎不能待,所以拉着对象说去大明山牵牛岗山上露营看星星,最重要的是可以避暑,查了一下“天文通”APP,山顶温度刚过 20°。
这一次的行程安排的比较充分,带着帐篷,充气床垫(自从上次去过象山回来后下单,至今还未使用),厨具(卡式炉锅碗瓢盆等),以及一些食材,螺狮粉,火锅丸子若干,方便面,然后还买了西瓜和卤味,准备的是相当充分。
周六早上起个大早收拾了一下,顺便洗洗水果,原本想的是中午之前能到目的地,结果在城区堵车了将近一个小时,两个多小时的车程硬生生跑了三个多小时,将近四个小时。
不过也不着急,一边聊天一边慢慢跑,安全第一。大概在 12 点也是到达了大明山山脚下,看到很多民宿和旅游团,我们慢悠悠的晃。此时距离目的地还有 20km 左右,剩下的全是盘山公路,上次跑这种公路还是在去年 12 月份,去了一趟寺坞岭看日出。
从山脚下往上看,重岩叠嶂,非常雄壮。公路不是很宽,会车时需要停下来慢点过,并且弯道处视线很不好,原本是打算鸣笛示意的,但是考虑到山区落石比较多,非必要情况下就不鸣笛了,避免和落石发生共振(不知道这种做法有没有问题),反正就是开的很慢,安全第一。
一路上没有遇到上山的车,可能因为我们去的比较早,下山的车基本也很少,偶尔遇到几辆,问了一下山上人多吗,说现在人不多,我们还在庆幸。
大概跑了半个小时终于看到山顶的气象台,我们的目的地就在这个气象台的旁边。
基本没有车,随便找了个不碍事的位置停一下。跟对象溜达了一圈,感叹风景非常不错,也很凉快大概只有 20° 出头,想着晚上估计会很冷,不过我们带了被子也没有太担心。
随后我们就从车里搬东西,拉着小推车到观景平台准备搭帐篷露营,旁边还有厕所,有水源,挺方便的不是很脏,还比较满意。
找了个宽敞的位置,没有遮挡,可以直接俯瞰群山,景色秀丽。
花了半个小时把帐篷搭起来,桌子摆一下,食材收拾一下,终于可以坐下来休息休息了。我们一边吃一边聊天,此时平台的人也渐渐多了起来,很多人准备来露营。幸好我们来的早,位置也比较宽阔。
等吃完饭收拾一下,也差不多三四点了,有些疲惫就躺帐篷休息了。
说实话,去的那天晚上观星条件不是很好,因为正好赶上满月,月亮很圆很大,导致星星就被遮盖住了。终于理解了那句古话, “萤火之光岂能与皓月争辉。”
不过也没有太在意,本来就是打算出来玩露营的,避避暑凉快一些。
第二天早上起来发现好多帐篷,附上一张图,我们洗漱了一下准备看看日出。不是很浓郁,但也有一番风味。
然后我们去停车的地方准备拿点东西,发现人非常之多,震惊到我了,听旁边人说,昨天夜里路边跟集市一样,人满为患,还好我们在观景平台,人相对来说比较少。
跟管理员聊了一下,说车都停到 2 公里之外了,本来都停在侧边的,后面上来的车直接把路堵住了,上面的车想走都走不掉,他已经疏通了不少,只剩下眼前这几百米了。
然后我们在路边看到了一些露营的人垃圾都不收拾好,风一吹刮的到处都是,部分垃圾飞下山坡,想清理都做不到,非常污染环境。管理员在旁边看着等他们人出来沟通一下,事后不清楚怎么样了。
反正我是垃圾都时刻装在袋子里,每次出门都带着垃圾袋,方便一起扔掉,毕竟这种非运营的地方又不收费,全靠自觉了。
回到我们的营地,吃了个早饭,风很大,就打算打道回府了,总体来说此次旅程还是比较满意的。
2025-08-03 08:00:00
很久没出去旅游了,和女朋友一起来了趟南京,随便离杭州很近,但一直没有机会,终于下定决心来玩一趟,也算了却一桩心事。
看了下侵华日军南京大暑杀遇难同胞纪念馆,非常庄严肃穆,刚好赶上淅淅沥沥的小雨,上天都为之哭泣,心情也变得沉重起来,感叹和平来之不易。
随后逛了总统府,了解了民国这一块的相关史实。
天色渐晚,又下起小雨,打消了前往秦淮河夫子庙的旅程,再会。
侵华日军南京大暑杀遇难同胞纪念馆
总统府
2025-07-25 08:00:00
2025/07/30 更新:
发现 Bitwarden 可以关闭二次验证,可以通过以下方式,进入 https://vault.bitwarden.com/#/settings/account 我的账户页面。
在登录旧版扩展前,先点击底部 停用新设备登陆保护
,登录之后再打开这个选项,提高安全性。
Bitwarden 是一款非常知名的密码管理器,其功能我就不赘述了,我来讲讲如何登录旧版本的 Bitwarden 密码管理器。
旧版官方安装包:https://github.com/bitwarden/clients/releases/tag/browser-v2024.11.2
肯定也有不少小伙伴喜欢旧版的 UI,因此就没有使用最新的版本,我用的是 v2024.11.2
,也是官方更新 UI 前最后一个稳定版本,喜欢旧版的推荐用这个。
但是在这个过程中,我发现了一个问题,那就是一旦退出登录旧版后,就再也登陆不上。
因为新版 Bitwarden 引入了一个输入二次密码的功能。也就是填写完主密码后,会给邮箱发一份邮件验证,填写验证后才可以登录。
而旧版是不存在二次密码这个功能的,因此正常输入主密码后接口会直接报错,从而导致无法登录。
我昨天就遇到了这个问题,研究了几个小时,还真让我找到一个办法,亲测非常简单好用,分享给大家。
核心就是获取新版的登录 cookie,手动插入到旧版中,就可以获取登录权限了。
话不多说,直接上教学。
首先下载一个新版 Bitwarden,这样扩展中就存在两个 Bitwarden 了。
正常登录新版 Bitwarden,然后在扩展中右键进入检查,点击 console
,输入一条指令。
// 读取 chrome.storage.session 数据
chrome.storage.session.get(null, data => console.log(JSON.stringify(data)));
这样你就可以获取到扩展的 session
数据,复制一下,替换到下面的数据,然后复制整段代码,打开旧版 Bitwarden,然后在扩展中右键进入检查,点击 console
,粘贴即可。
const sessionData = { key1: "value1", key2: "value2" }; // 替换为你的数据
// 存入 chrome.storage.session
chrome.storage.session.set(sessionData, () => {
console.log("Session 数据导入成功!");
});
同理,local 数据也是一样的流程,在新版 Bitwarden 获取 local;
// 读取 chrome.storage.local 数据
chrome.storage.local.get(null, data => console.log(JSON.stringify(data)));
到旧版粘贴数据进去;
const localData = { key1: "value1", key2: "value2" }; // 替换为你的数据
// 存入 chrome.storage.local
chrome.storage.local.set(localData, () => {
console.log("local 数据导入成功!");
});
大功告成,在旧版 Bitwarden 扩展右键刷新一下,这时候你会发现一个问题,那就是扩展图标为什么是灰色不可用状态,不用着急,回到浏览器扩展页面,点击 刷新
重启扩展即可。
又可以流畅使用 Bitwarden 了!
顺便吐槽一句,新版 Bitwarden 真是一团 shit.
2025-07-07 08:00:00
在当今互联网世界,验证码作为人机验证的重要工具无处不在。然而,频繁输入验证码对用户体验造成了不小的困扰。今天,我想分享一个名为 “CAPTCHA-automatic-recognition” 的开源项目,它巧妙地运用 AI 技术,实现了网页验证码的自动识别与填充。
作为一名经常需要在不同网站注册和登录的开发者,我深受验证码困扰。有时仅仅是查询一个信息,就需要输入验证码;有时验证码字符扭曲到难以辨认,需要多次尝试才能通过。
这些小小的摩擦积累起来,浪费了大量时间。我想:既然现代 AI 视觉模型已经如此强大,为什么不利用它们来自动识别验证码,节省我们的时间和精力呢?
于是,“CAPTCHA-automatic-recognition” 项目诞生了。
我选择了以油猴脚本的形式实现这个功能,因为它可以轻松地集成到各种网站上,无需修改网站源码。
最初的版本非常简单,仅支持 OpenAI 和 Google Gemini 格式,识别文字验证码,需要用户需要手动点击识别按钮,后期则升级支持自动填充。
关键问题是如何准确获取网页中的验证码图片,我简单做了一套图像检测程序,通过选择器找到可能是验证码的图片元素,比如:
captchaSelectors: [
'img[src*="captcha"]',
'img[src*="verify"]',
// ...
],
随着用户的反馈,我加入了对阿里云通义千问的 API 支持,用户可以根据自己的需求和偏好选择不同的 AI 模型。
并且我加强了对 prompt 的优化,根据网友的建议升级了 prompt,让模型更加准确地识别验证码。
来源:https://linux.do/t/topic/756503/135
export const DEFAULT_PROMPT = `# Role: 验证码识别专家
## Profile
- language: 中文
- description: 一个专为高精度识别验证码而设计的AI模型。能够快速、准确地从复杂的图像中提取字符或计算数学表达式的结果,并能有效对抗常见的干扰元素。
- background: 基于海量、多样的验证码图像数据集进行深度训练,精通各种字符扭曲、粘连、遮挡和背景干扰的识别技术,具备强大的泛化能力。
- personality: 精确、高效、客观、直接。只关注任务本身,不产生任何与结果无关的额外信息。
- expertise: 计算机视觉、高级光学字符识别(OCR)、图像预处理与去噪、模式识别、基础算术逻辑。
- target_audience: 需要自动化处理验证码的开发者、自动化测试工程师、数据科学家。
## Skills
1. 核心识别能力
- 高精度字符识别: 准确识别大小写英文字母、数字,并能精确区分外形相似的字符(如:0和O,1和l,g和9)。
- 数学运算处理: 识别并解析图片中的数学算式(如:3+5*2),并计算出最终的数值结果。
- 强抗干扰能力: 自动过滤和忽略图像中的干扰线、噪点、斑块、背景纹理等非关键信息。
- 字符分割技术: 即使在字符粘连、重叠或间距不等的情况下,也能有效地将其分离以便独立识别。
2. 辅助处理能力
- 图像预处理: 自动对输入图像进行灰度化、二值化、去噪等操作,以提升识别的准确率。
- 快速响应: 以极低的延迟返回识别结果,满足实时性要求。
- 结果格式化: 严格按照指定的格式输出,确保输出的纯净性,便于程序调用。
- 鲁棒性: 对于不同字体、大小、颜色、角度的字符组合均有较高的识别成功率。
## Rules
1. 基本原则:
- 结果唯一: 输出内容必须是且仅是验证码的识别结果。
- 绝对精确: 尽最大努力确保字符识别的大小写和数值计算的准确性。
- 任务聚焦: 仅处理验证码内容,忽略图像中的任何其他元素。
- 保持静默: 除最终结果外,不输出任何提示、标签、解释或说明。
2. 行为准则:
- 直接输出结果: 若为字符型验证码,直接返回字符串;若为计算题,直接返回计算后的数字。
- 严格区分大小写: 必须准确识别并返回字符的原始大小写形式(例如'W'和'w'是不同字符)。
- 精准区分易混淆字符: 必须对数字“0”和字母“O”、数字“1”和字母“l”等易混淆字符进行准确区分。
- 自动执行运算: 遇到数学表达式时,必须完成计算并仅返回最终的阿拉伯数字结果。
3. 限制条件:
- 禁止任何解释: 不得对识别过程、结果的置信度或遇到的困难进行任何说明。
- 禁止附加文本: 返回的最终结果前后不能有任何空格、引号、标签或“答案是:”等引导性词语。
- 禁止互动: 不得向用户提问或请求更清晰的图片。
- 禁止失败提示: 即使无法完全识别,也应根据已识别内容尽力输出,而不是返回“无法识别”之类的自然语言。
## Workflows
- 目标: 接收一张验证码图片,精准、快速地返回其内容或计算结果。
- 步骤 1: 接收图像并进行分析,判断验证码类型(字符型或数学计算型)。
- 步骤 2: 应用图像预处理技术,对图像进行降噪、增强和二值化,以凸显关键字符,消除干扰线和背景。
- 步骤 3: 对处理后的图像进行字符分割,然后逐一识别。对于数学题,则识别数字和运算符。
- 步骤 4: 整合识别结果。如果是字符,则按顺序拼接成字符串;如果是数学题,则执行运算。
- 步骤 5: 输出最终结果。确保输出内容绝对纯净,符合Rules中的所有规定。
- 预期结果: 一个不包含任何多余信息的字符串(如“aB5fG”)或一个数字(如“28”)。
## Initialization
作为验证码识别专家,你必须遵守上述Rules,按照Workflows执行任务。
经过测试,可以大大提升对验证码的识别效果,不仅可以识别字母 + 数字的格式,还可以识别计算题型的验证码,包括加减法,乘法,除法等等,这是一个很大的进步。
有用户反馈不知道模型是否可用,因此我加入了 “连通性检测” 的功能,可以帮助用户检查模型的可用性。
在开发的后期,由于人力的因素,虽然内置的验证码识别程序足够满足很多网站使用,但依然有网友反馈识别失败。
我意识到,这不是一个人可以完善的事情。因此我开发了高级设置功能,允许用户自定义验证码选择器和输入框选择器。这解决了不同网站验证码实现差异导致的兼容性问题。
并且简单写了一个教程,帮助用户使用这个功能。
跨域图片访问问题
很多网站的验证码图片设置了跨域限制,无法直接获取图像数据。为解决这个问题,我实现了一套图像处理流程,通过 Canvas 间接获取图像数据,然后处理为 base64 格式传输给 AI 模型。
AI 模型选择与优化
不同 AI 模型各有优缺点:
经过反复测试,我发现 gemini-2.5-flash-lite
模型在验证码识别任务上表现最佳,因此成为我的首选。
目前,这个项目已经在 GitHub 和 Greasyfork 上发布,获得了不少用户的好评。投稿到阮一峰周刊,也收录了该项目。
来源:https://github.com/ruanyf/weekly/blob/master/docs/issue-355.md
CAPTCHA-automatic-recognition 这个项目虽小,功能也比较简单,却体现了 AI 技术如何改善日常生活的小痛点。从最初的想法到如今功能完善的工具,这个过程既有技术上的挑战,也有解决问题带来的成就感。
如果你也经常被验证码困扰,不妨试试这个工具。它可能不是最复杂的 AI 应用,但一定是最实用的 AI 辅助工具之一。
如果你觉得这个功能不错,欢迎点个 star 支持一下~
2025-06-11 08:00:00
时隔三年,终于完成了这个系列,Obsidian 多端同步坚果云之移动端同步。这依赖于坚果云的官方插件 — Nutstore Sync,这个插件支持通过 Webdav 协议将坚果云与 Obsidian 本地笔记进行链接。
Github: https://github.com/nutstore/Obsidian-nutstore-sync
由于该插件还未通过 Obsidian 插件商店审核的原因,需要借助另外一个已上架的插件 – BRAT,可在官方商店直接搜索下载。
需要在 PC 端和移动端同时安装以下两个插件才能进行同步,安装流程都是一样的,我暂以移动端为例。
下面是图示流程;
下载安装完成之后,在 BRAT 的设置页面找到 Add beta plugin
按钮点击它。
在添加插件窗口中输入 Nutstore Sync 的 GitHub 地址,点击 Add plugin
安装,即可完成安装。
这一步完成之后,这个插件就已经存在于你的 Obsidian 设置中,下次打开 Obsidian 就可以直接使用了。
PC 端和移动端使用方法都是一致的,我暂以 PC 端为例进行截图说明。
Nutstore Sync 中我建议以账号密码进行登录,这样 webdav 的权限更稳定一些,有尝试过使用单点登录,但是容易掉登录权限。
账号密码就是你的坚果云密码,注意不是登录密码,需要在坚果云网页设置中进行操作。
可以参考一下我的设置。
Git
语法标记冲突(程序员比较习惯)过滤规则:过滤一些不想同步的文件,由于 .Obsidian
很多配置文件,我不想在手机上同步,就过滤掉了。
2025-05-31 08:00:00
昨天周五下班后,准备食材包粽子,迎接端午节的到来。
主材料:粽叶、糯米 馅料:五花肉、豆沙、咸蛋黄、蜜枣
由于是第一次包,我跟女朋友一边看教程一边学习,刚开始用的一张叶子,总包不好,后面换成两张叶子,发现越来越得心应手。
模样不算太好看,但是都是真材实料,且没有露馅。但是好像是酱油加的有点少了,所以导致不够咸,总体偏淡,但是口感也是可圈可点,是我喜欢的馅。
后面还有一盆糯米,准备改进一下,多加点酱油,手法上也有所进步了,再接再厉!
分享几张图。