MoreRSS

site iconDayu | 大宇修改

喜欢写博客和摄影,喜欢折腾服务器、体验数码产品、看书、看剧。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Dayu | 大宇的 RSS 预览

用 Keyboard Maestro 快速读取新通知中的验证码

2026-02-12 21:45:16

从 macOS 15 开始,系统支持在 Chrome 等浏览器中自动填充验证码,但该功能仅限于从系统自带的「信息」和「邮件」App 中提取。如果你使用 Spark、Outlook 等第三方邮件客户端,则无法享受此便利。

因此,我用做了一个小插件,快速读取新通知中的验证码。这样就能兼容几乎所有第三方邮件客户端和社交软件。其流程为:

  • 自动识别验证码弹窗区域,静默截图;
  • 将截图上传至 OpenAI gpt-4o-mini,通过多模态识别精准提取数字。
  • 自动剔除格式杂质并存入剪切板;
  • 触发 macOS 原生系统通知。

以下是完整代码,可以通过 Keyboard Maestro 或 Alfred 等软件触发。我使用KM,这是脚本下载地址:DayuGuo/Copy-OTP-from-notification

#!/bin/zsh

# --- 配置区 ---
API_KEY="你的 Api"

# --- 1. 动态获取屏幕宽度 (适配 14/16寸/外显) ---
SCREEN_INFO=$(osascript -e 'tell application "Finder" to get bounds of window of desktop')
SCREEN_W=$(echo $SCREEN_INFO | awk -F', ' '{print $3}')

# --- 2. 计算截图区域 (右侧 28% 宽度, 避开菜单栏) ---
CAPTURE_W=$((SCREEN_W * 0.28))
CAPTURE_X=$((SCREEN_W - CAPTURE_W))
CAPTURE_Y=45
CAPTURE_H=300

# 执行静默截图
/usr/sbin/screencapture -x -R "$CAPTURE_X,$CAPTURE_Y,$CAPTURE_W,$CAPTURE_H" "$TEMP_IMAGE"

# --- 3. 调用 AI 处理 ---
if [[ -f "$TEMP_IMAGE" ]]; then
    BASE64_IMAGE=$(base64 -i "$TEMP_IMAGE")

    RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
        "model": "gpt-4o-mini",
        "messages": [
          {"role": "user", "content": [
            {"type": "text", "text": "Extract the verification code. Output ONLY digits. If none, say NONE."},
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,'$BASE64_IMAGE'"}}
          ]}
        ],
        "max_tokens": 10
      }' | grep -oE '"content": "[^"]+"' | cut -d'"' -f4)

    # --- 4. 结果处理 (自动复制 + 系统通知) ---
    if [[ "$RESPONSE" != "NONE" && -n "$RESPONSE" ]]; then
        # 核心:使用 printf 确保剪贴板纯净
        printf "$RESPONSE" | pbcopy
        # 使用系统原生通知显示验证码内容
        osascript -e "display notification \"$RESPONSE\" with title \"验证码已复制\""
    else
        osascript -e "display notification \"未检测到验证码\" with title \"识别失败\""
    fi

    # 清理
    rm "$TEMP_IMAGE"
else
    osascript -e "display notification \"请检查屏幕录制权限\" with title \"截图失败\""
fi

DEVONthink Agent: a CLI tool with RAG-enhanced search

2026-02-10 06:13:52

DEVONthink 的 AI 检索是基于文本向量化与统计相似度的本地语义索引,不依赖互联网。4.0 后,引入了对第三方大型语言模型(如 ChatGPT API等)的支持,可以使用自然语言描述需求,AI 会将其转换为 DEVONthink 专用的搜索语法并执行。

它的边界也很清晰。底层仍然围绕已有文本做匹配,跨语言与同义改写能力有限。比如搜 「Disease Spreading」,只写了 「Transmission」 的文章,很可能被漏掉。

RAG(Retrieval-Augmented Generation)走的是另一条路线。先用向量检索做粗筛,再让模型基于语义做重排与生成。查询词和原文表述可以完全不同,只要意思相关,就能被找到。

DEVONthink 的数据库结构与 Obsidian 这类笔记工具差异很大,通用 RAG 工具往往无法直接索引。Elephas 对 DEVONthink 做了专门适配,但价格非常高。其 Setapp 版本不完整,目前还不支持 DEVONthink。

DEVONthink_agent

DEVONthink Agent 是我最近尝试做的命令行工具,用自然语言搜索和分析数据库里的内容。

它的核心思路是混合检索。关键词精确匹配为基础,RAG 负责跨语言与语义召回,DEVONthink 的 See Also 负责发现隐含关联。三路结果合并排序,被多种路径同时命中的文档会更靠前。这样做的价值在于减少单一检索范式的盲区。

这个工具是完全只读的。代码层面没有任何写入、编辑或删除能力,安全边界清晰。

项目链接:https://github.com/DayuGuo/DEVONthink_agent

另外,我在测试 Research Expansion Mode。Agent 自动执行一个三阶段工作流,最后输出一份结构化研究报告。

  • Phase 1 翻阅你的资料库;
  • Phase 2 去网上找新东西;
  • Phase 3 生成报告。普通对话是「你问它答」。

Research Expansion 是「你给主题,它独立做一轮完整的文献调研+网络调研,告诉你:你有什么、缺什么、该补什么」。

请注意!

这是个实验性的插件,请谨慎使用,不要在工作环境尝试。

我日常工作使用英文,但它其实不是我的母语,所以我的数据库中有很多中文资料。RAG 确实能帮我在多语言环境下更容易找到目标文件。但说实话,我更享受制作这个插件的过程,日常使用频率并不高,DEVONthink 本身其实已经足够我的基础需求。

如果有建议可以写在 GitHub 或本文评论区,谢谢!

年末的新习惯

2026-02-04 23:02:48

最近花了好几天整理 DEVONthink 数据库,从 12GB 瘦身到 8GB,文件数量从 14,000 降至 8,000。删掉这么多内容,并非它们当初没有价值,而是它们建立在 AI 普及之前的一套信息获取逻辑之上。那时我的判断标准很简单,只要不是简单关键词能检索到的,就值得收藏。

回头再看,很多链接已经失效。即便仍然有效,也能在 ChatGPT 的检索下轻松找到。原本稀缺的信息,正在变得随处可得。

这迫使我调整纳入数据库的标准。凡是通过一两轮 AI 对话就能获得的内容,都不再进入数据库。信息需要经过我自己的复述、整理和重构。只有那些需要我真正钻进 rabbit hole 才能找到的东西,才值得长期保存。

瘦身

整理过程中,我将大量 HTML、PPT、Doc 等格式文件转成可检索的 PDF 格式,以减少体积。

转换时重新阅读了这些资料,发现不少内容本身就符合前述判断条件。它们可以被轻易检索到,也很可能已经进入 AI 的训练语料库。继续把它们当作核心数据资产,意义并不大。

音频和视频资料也做了同样的处理。我先用 AI 转成文字,再快速回顾。结果很直接,大部分音频没有必要保留,连文字版也没有保存价值,删掉反而更轻松。

缓解囤积欲

定期整理数据库,有助于区分文件的长期价值与一时囤积冲动。

期间,我很高频地使用 DEVONthink 的 Smart Group 功能。它能帮我从不同的维度把数据库切开,去查看关键词和文件种类的构成。我通过这个功能进行筛选,从中找到我想要的信息,或者删除不需要的信息。

真正值得留下来的,是我当时的思考过程。哪怕零散、不成熟,也是不可被替代的部分。

发现自己还是挺容易沉迷这种数据整理的,有一天我几乎花了一整天坐在这看自己的数据库。

新习惯

整理完 DEVONthink 之后,对电脑和手机的软件也进行了同样的整理。

CleanMyMac 可以按最近使用时间排序应用。整理前电脑里有 130 个软件,清理后剩下 87 个。不少软件半年甚至一年才打开一次,未来我会等需要的时候再下载使用。手机也做了类似的处理。在英国,大多数会员卡可以放进 Apple 钱包,不再需要软件,减少了不少应用负担。

我一直有个习惯,每年春节期间将微信聊天记录备份,然后全部删除。今年整理数据库后,以后每年过年,我可能都会做一次数据和软件的全面清理。

Bartender 的替代品

2026-01-30 23:21:24

之前写过一篇文章介绍我的菜单栏配置:一点点展开我的 macOS,那时我还很喜欢 Bartender。

macOS Tahoe 更新重写了菜单栏相关的底层交互逻辑,很多第三方菜单栏管理软件开始频繁出问题,直到现在 Bartender 依然偶尔会崩溃。

自从被收购之后,Bartender 的稳定性肉眼可见地下滑,慢慢降低了我的信任。

市面上的替代品体验也谈不上理想,试了一圈,各有各的缺陷,都没很好解决稳定性问题,无法放心长期使用。

上个月一狠心,直接用系统自带的「Allow in the Menu Bar」替代 Bartender,一口气隐藏了二十多个图标。

用了一个月之后发现,菜单栏里原本那些常驻工具,大多数时间其实并不会用到。真正需要时,通过 Alfred 快速启动就足够了。

系统原生这个方案功能很简单,只支持隐藏图标,没有自动规则,也没有分组和子窗口,但在日常使用中已经完全够用,而且稳定、轻量、没有额外负担。


最近发现 mac 上的 ABC输入法能删掉,只留 Squirrel,menu bar 更清爽了!参考:https://vastiny.com/2023/04/17/omo7cs3h0mm3g3ct/

在 AI 浪潮中迷失的 Setapp

2026-01-27 00:58:55

看到 Setapp 要求新上架的软件具备 AI 功能,忍不住吐槽几句。

过去两年上线的新工具里,我印象较好的有 LookAway、Bike、Strongbox、Supercharge、Muse 和 Spark。它们的共同特点是:用途明确,解决实际问题。都不以 AI 为主。

期间 Setapp 接连上架了一批评分低、用途模糊的 AI 软件。而 AI 领域的迭代速度极快,其中不少已经被市场边缘化。

好软件的魅力来自明确的用途和设计。Setapp 一旦用「AI 功能」做筛选标准,就会忽略那些真正优秀但不需要 AI 的工具。


刷 Reddit 时发现 Setapp 甚至没有接受 FSNotes。

Setapp 还值得吗?

我虽然一直订阅着 Setapp,但其实并不完全依赖其中的核心软件 Noteplan、Ulysses、Craft、MoneyWiz 等。你如果是其中一个软件重度用户,那么订阅是合理的。

如果你不属于这一类,比较合适的路径是:先免费试用 Setapp,再单独购买真正喜欢的。Setapp 的安装和交互体验很不错,试用软件的流程会很丝滑。

目前单独订阅的价格在约 1000 人民币一年。Power User 方案支持 4 人共用,每人约 320 人民币一年,但与旧家庭组不同,只能共用单一登录账号。这种情况下,稳定合租需要信任关系,更适合熟人。

目前,在 Setapp 中价格较高且我会持续使用的其实只有 Spark(10 美元/月)和 CleanMyMac(2.45 美元/月)。

这是我当前的使用情况:

说实话,如果不是在老家庭组里,我也不会续费 Setapp(MacOS+iOS 为 214 rmb/年)。

目前它对我的吸引力可能是:低成本尝试使用一些日常低频,但偶尔需要的软件。

Setapp 要求新软件必须具备 AI 功能,其实反映了当前软件行业的集体焦虑。API 调用有持续的成本,这成了开发商维持高额订阅制的理由,即使很多用户根本不需要这些功能。

Setapp 的订阅收入按照用户本月实际使用过的应用来分配,使用权重越高的应用分成越多。开发者如果还带来新用户,可以额外拿到那位用户订阅费的 20%。所以 Setapp 目前采取的策略比较像「养蛊」。大量引入 AI 软件,让用户做筛选。低频软件在这样的生态里没有收入,甚至无法生存。

但这跟我最初订阅的初衷不同,我其实期待 Setapp 像山姆一样,订阅是为了省筛选成本,希望平台替我过滤,把高质量的工具集中呈现给我,而不是把一堆软件批量倒进来,让我自己去淘金。

其他开发者也在寻求新的思路,很多软件看上去是买断制,但实际为「一次性买断当前版本 + 一年的更新权」。HookmarkDEVONthinkTinderbox 现在都是如此。这种「年费更新制」是开发者与用户之间的妥协,与买断制相比,给了开发者更可持续的资金流;与订阅制相比,让用户更容易接受付费。我不喜欢,但碰到真正喜欢的软件,也慢慢接受了。

再谈 iA Writer

2026-01-26 00:19:06

去年写过一篇文章聊 iA Writer 的手感,但它的优秀之处不仅于此。

iA Writer 与 Obsidian 这种偏重的笔记软件不同,定位在 Apple Notes、Typora、Drafts、FSNotes 这类轻输入编辑器之间,解决的是一个具体问题:舒适的用 Markdown 在 iOS、iPadOS 和 macOS 写作,本地优先,轻量易用。

细分领域

与 Typora 的差别在端支持。Typora 的编辑体验很好,但停在电脑端,且非 macOS 原生软件。iA Writer 则可以用 iCloud 在各设备之间同步。

FSNotes 优先输入速度和捕捉能力,有更快的录入、快捷键与双链支持,但编辑体验偏工具化。iA Writer 编辑感更好,也能用 Shortcuts 扩展自动化能力。

另外,除了 Typora 和 iA Writer,这几个轻文本编辑器都无法做 Markdown 文件的通用编辑器,比如随时在 Finder 里打开 Markdown 文件并编辑。

与 Apple Notes 和 Drafts 的差异在文件格式。Notes 和 Drafts 都不输出可见文件,非 Markdown 格式,无法走 Finder、Git 或 DEVONthink 的索引路径,数据量大了之后(大概1k条笔记之后),并不适合做长期知识系统。很多碎片化的信息会沉下去,难以浮出水面。iA Writer 则支持本地文件,具备扩展性。

另外,DEVONthink 新版本优化了版本控制的部分,补足 iA Writer 作为长文本编辑器的短板。

我最近沉迷语音笔记,用 Typeless 在 iA Writer 里记录,再索引到 DEVONthink。整体体验比 Voicenotes 要好。

熟悉我的朋友知道我曾是 Obsidian 的重度用户。

  • 最初是 Obsidian + DEVONthink + Typora + Drafts
  • 去年切换到 DEVONthink + Typora + Drafts;
  • 再到现在的 iA Writer + DEVONthink。

我既可以用 iA Writer 记录碎片化思考,也能用其打开 DEVONthink 里的 Markdown 文件,舒适的编辑长文。

iA Writer 对我的价值在减少环节,增加舒适度。它的设计很完整,点到为止。简单漂亮,但背后隐藏了丰富的可扩展性。

Tips

介绍一些 iA Writer 的小技巧。

Shortcuts 里有三个我比较常用:Add Diary Entry、Open Clipboard、Open New。最喜欢 Add Diary Entry,自动建一个 Daily note,每次使用的时候能加一个时间戳。

点击使用 Shortcuts 并不方便,可以将其设置为快捷键(如下图所示)。

添加快捷键

iA Writer 有 Smart folder 功能,只是比较隐蔽。笔记量上去之后,还挺必要的。

iA Writer 对 iPad 版有优化,很舒服。

iA Writer 可以直接将文章推送到 WordPress 服务器里。

iA Writer Command+K 快捷键是插入链接。如果我复制的链接还带有一些其他文本,这个快捷键能自动识别「链接」部分并插入。


另外,我还冲着 iA Writer 的体验买了 iA Presenter。Presenter 目前体验还很糟,请避雷!