最近在做一个简单的 Agent 产品,这个产品的定位是个人自部署,所以初期并没有做太高的安全隔离设计(也没有使用现成的 Sandbox)。但临近发布,我不得不考虑一个问题 —— 如果 AI 搞坏了事情,那会怎么样? 之前的一切都在一个 Docker 容器里,理论上 rm -rf / 也不会对宿主机造成太大的影响,但却可能导致一个错误的命令导致整个服务所依赖的文件系统被清空,这在我看来是不可接受的。我可以接受不去考虑 AI 刻意作恶,但也希望当 AI 犯错时不会对平台造成影响(这也是为什么我的 Agent 服务从第一个版本开始就做成了所有产出的版本管理、可回滚)。我的方案 —— 依然不去考虑使用沙盒做安全,但是隔离开平台和 Agent…
阅读全文感觉我的生活似乎相当简单,毕业后直接进了某网安公司实习、然后就慢慢悠悠待了六年,直到今天。 毕竟是人生的第一次,感觉应该写点什么纪念一下。 刚毕业的时候是 2020 年,选了一个网安公司。当时进这个公司非常重要的一点是,我对网安行业非常有兴趣(初高中「捣鼓」过很多东西,还玩过渗透,甚至年少无知黑过别人论坛 - 幸好人家没报警),而且这家公司还运营着我曾经经常逛的一个安全论坛 当年也正值网安行业如日中天,开心入职了。刚入职的时候其实福利相当可以,各种下午茶、福利、多余的假期、奖金等等,各种活动也不少。 入职的时候面的是 Python ,还记得进公司的时候接手的是当时的一个老项目加功能。读这个项目源码的时候真的非常痛苦,具体记不清了,但…
阅读全文背景 在学习 Race 或原子操作时,往往会有一个很经典的示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #include #include #include #include static long long counter = 0; static long…
阅读全文NULL 与任何值的运算结果都是 NULL NULL 有一个很重要的特性:NULL 与任何值的运算结果都是 NULL 1 2 3 4 5 SELECT 1 = 1; -- true SELECT 1 = NULL; -- null SELECT NULL = NULL; -- null SELECT 1 != NULL; -- null SELECT NULL != NULL; -- null 这也就意味着,对于存在列 col BOOLEAN NULLABLE 的表,如果一行中 col 列的值为 NULL,则下面的四条查询都不会包含这行 1 2 3 4 5 6 7 -- 等于自不必说 SELECT * FROM "table" WH…
阅读全文我之前的 Zeabur 集群是独立跑在一台物理机上的,物理机相比云服务器的劣势之一就是底层存储的数据安全性 —— 云服务器的硬盘通常是由云服务商保证了安全性不同,物理硬盘坏了就是坏了 而不幸的是,不久前我就遇到了…… 所有数据差点消失,幸亏坏的盘并没有完全坏,以只读方式还能读(只是不能写)算是挽留了我的数据 但那以后我就一直在思考怎么保证数据安全,经过数个不同的方案研究,我最终的选择是 —— 将整机移动到 PVE 中 然后在 PVE 的底层使用 RAID 1 硬盘 方案敲定,行动开始 —— 我整个的迁移不太具有可复制性,因此写一篇完整的「迁移指南」确实不太有意义,但中间确确实实遇到了一些小问题,我觉得记录下来还是比较有价值的 💡…
阅读全文现存订阅 ChatGPT Plus ChatGPT 目前已经成了我的长期订阅选择 一方面,GPT-5(和原来的 o3)体验确实好,可以在思考的过程去搜索、执行代码简直是王炸 另一方面,Codex 写代码是真的强,绝大多数能力已经能超过 Claude 了,只有 Codex 软件本身的用户体验差了一点 还有一点,Codex 自带 PR 代码审查!而且是完全免费的,完全可以替代掉 Code Rabbit / Cursor 之类的产品了 这一切只要 $20 真的很值 Proton Visionary Proton Visionary 依然在我的订阅列表中 但我已经越来越少用它了,目前没有退订一方面这东西退订需要 Deactivate 邮件地…
阅读全文2023 年 4 月我在 xlog 下写下了第一篇博客。xlog 真的是一个我很喜欢的博客平台,好看,对于 markdown 的第一方支持,不用考虑部署、图床等问题,自带 AI Summary、自带双语翻译,真的是一切只需要「写」即可,哦对,更重要的是,依赖于区块链技术,虽然你写的文章是在平台上的,但所有数据都依然属于你,且所有数据都是永久保存。 然而,两年过去了,xlog 这个平台虽然还在,但我认为它已经死了。GitHub 更新已基本停滞,没有人处理 issue、没有人审阅 pr,xlog 官网上充满了 spam,也没有人去管理社区。 其实这一切的原因都很好理解 —— xlog 的开发者 DIYGod 转去做 Folo 了。是啊,…
阅读全文Python 的 pth 文件提供了在任何 Python 解释器执行前执行命令的能力,可以方便的执行一些初始化脚本 pth 文件的能力 Python 解释器在启动时会自动 import site 模块(除非启动时指定 -S flag),而 site 模块有一个行为就是会寻找 site-packages 目录(最常用的场景就是我们安装包的目录)下的所有 .pth 文件并依次「执行」它。 需要注意的是, pth 实质上并不是脚本,它的定义是「path configuration file」,格式是每行一个「additional items (one per line) to be added to sys.path」,实际上,它每一行可…
阅读全文将 A-Z 逐一输入到 Google Chrome 的地址栏里,我的 Google Chrome 都会自动补全出哪些域名呢? 本文灵感来源于 2024: 浏览器从 A 到 Z,首发于少数派 A - https://axiom.co Axiom 是我最喜欢的网站日志收集分析工具,免费版拥有着高达 500GB / 月的免费额度,我的多款产品(包括我最新正在做的 1Space)都是使用的它作为日志收集。 如果你在找一款日志工具,强烈推荐它! B - https://baidu.com 无可争议…… 虽然我现在确实不怎么用百度了,但是网络连不上的时候还是第一时间用百度做测试的😂 C - https://chatgpt.com ChatGP…
阅读全文现存订阅 (按照实付月金额降序) Proton 我是 Proton Visionary 用户,Proton Visionary 的价格 $479.76 / 2y,是我所有订阅服务中最贵的了。 我依然在持续订阅中,且目前对于 Proton 依然很满意 Visionary 套餐持续「加量不加价」 相比之前,近年明显增加了 Visionary 套餐的「新品尝鲜特权」,所有新产品/新功能都会优先给 Visionary 用户使用 在可以预见的未来我将继续长期订阅下去 AD:Proton Visionary 可以分享给他人加入,如果你想加入我的家庭组请发邮件给我 singee@proton.me,价格为 92 天 ¥109 Monica 订阅了…
阅读全文OmniFocus 4 即将发布!在我多年管理我的待办的过程中,我尝试过 Todoist、滴答清单、Things、Sorted 等等几乎所有市面上的 TODO 软件,但最终,OmniFocus 终成我一直以来的最终选择。而谈及 OmniFocus 的强大性,不得不提的就是他强大的自动化能力 —— Omni Automation。 Omni Automation 实际上是基于 JS 脚本的,而编写纯 JS 脚本的过程…… 一言难尽。虽然 Omni Automation 官方提供了 TypeScript 的定义文件,但一方面难以做好类型检查,另一方面其详尽程度仍有待提升(长久不更新、大量使用 any 等),此外,由于缺乏打包工具,代码逻…
阅读全文总结 基础规则: 所有的 init 函数都在一个 Goroutine 中执行(但请参见下面的特殊注意) 如果 package a 引用了 package b,那么 a 的 init 一定在 b 的 init 运行完成后运行 main package 的 main 函数一定在其他 init 函数均运行完成后再运行(即运行顺序为 package 的 init -> main 的 init -> main 的 main) 同一 package 中的多个文件中的 init 执行顺序未定义,同一文件中的 init 自上而下运行 如果 package a 同时引用了 package b 和 c,那么 b 与 c 的 init 顺序在…
阅读全文看到了 FeedbackTrace 这个项目,看起来不错,但是我不会去使用,一个主要的原因就是它没有公布定价。 如果去选择一个一个直接面向 C 端的第三方产品,我一定会选择已经有了明确定价的 —— 否则我将承担巨大的未来的风险。如果未来定价不满足我的预期,我需要去考虑怎么迁移数据、怎么抹平用户体验差异等,一方面可能带来不确定的时间成本,另一方面可能产生糟糕的终端用户体验。 面对公测期间的价格和上线后不一致的做法,各个产品有各个产品不同的思路,最统一的就是降价后下一期账单自动降价、涨价保持原有价格不变或至少保持原有价格一定时间。特别的,Rewind 在 Early Access 期间的策略是调低定价后为历史订单全额退款、调高价格保持用…
阅读全文最近在一个自己的小 Side Project 中使用了一下 Server Action,感受大概是 更多的其实是替换原来的 /api 路由,可以把它想做一个 TypeSafe 的 RPC,原来需要自己去定义 API 然后生成代码,这些 Server Action 直接帮你做了 因此,感觉原来用了 Next.js 的 /api 路由的,迁移到 Server Action 会有较大的体验提升 Server Action 本质只能向前端发送一个 JSON Object,缺少了标准 HTTP/RPC 的 StatusCode 和 Headers 的能力,因此如果真的想去很好的用它可能 Server 和 Client 仍然需要包一层 目前 S…
阅读全文在 Swift 上,执行一个异步的函数大体上有两种办法 Task DispatchQueue 背景知识:线程和队列 Swift 同时支持多线程和异步,因此 存在主线程和多个后台线程 每个线程存在若干队列(若干个全局 global 队列(每个优先级一个)、自定义队列(人为创建)) 背景知识:队列优先级 在队列层面,存在优先级的概念(在 Task 中叫 priority,在 DispatchQueue 中叫 qos) userInteractive:最高优先级,适用于 UI 操作(例如动画等)(在 Task 中被弃用) userInitiated:较高优先级,适用于用户触发的操作 default:中优先级,默认(在 Task 中被弃用)…
阅读全文尽可能降低 RSS 的「手动筛选」,包括内容量和频率 更多的关注你的稍后阅读,而不是追求新的信息 1 有两个层面,一是尽可能的用自动化,将关注的内容直接推送到稍后阅读工具中,而不是人工筛选,另一个是人工筛选的频率要尽可能降低,至少不应该每天都去筛选 2 是,尽管新闻很诱人,但是稍后阅读中堆积的内容也曾是你的兴趣,尽可能让你的稍后阅读呈现递减的趋势,反而新的内容没那么重要
阅读全文前言 在构建 Linux/Unix 系安装包时,除了打包成标准的适用于各种发行版的软件包以外,我们更多的可能希望可以提供一个 shell 脚本进行程序的安装,将安装步骤简单收敛为两步:下载脚本 + 运行脚本。 通常,这种大多数的安装脚本都是再次从互联网上下载所需资源的,这样可以最小化脚本的体积并保证安装的始终是最新版本,但是这同样导致了下载到的「安装包」本质上是个「安装器」,无法离线安装。 本文将介绍一种已经在生产环境验证过的方案,来动态在安装包中嵌入网址。 受限于一些原因,本文更多的从原理层面进行讲解,暂无法提供完整的代码解决方案,敬请谅解 另外,以下代码均为根据原理为本文撰写,虽然原理已经经过生产验证但所使用的代码并未经过严格的…
阅读全文通常在本地化时往往会涉及到时区转换的问题,而通常在真正关注到时区之前我们所「默认」使用的时区为 UTC 或“本地”。 本文以 Go 为例,分析下 Go 中的时区使用。 读取时区 在 Go 中,读取时区使用的是 LoadLocation 函数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // LoadLocation returns the Location with the given name. // // If the name is "" or "UTC", LoadLocation returns UTC. // If the name is "Local", LoadLocation r…
阅读全文Windmill 是一个开源可自部署的工作流引擎(甚至低代码平台),可访问 https://www.windmill.dev/docs/compared_to 查看其官方与 Zapier 等服务的对比。 本文将展示如何将其部署到 Fly.io 概览 本文介绍了两种方式来进行部署 Windmill,我分别称之为 minimal 和 full 模式。 在 minimal 模式下,所有 Windmill 组件运行在单一 app 中,这是最简单且经济的方案,但是不够灵活(例如,因为 Server 和 Worker 运行在同一个容器中,难以水平扩展); 在 full 模式下,Windmill 组件被拆分至两个不同的 app 中,其中一个运行…
阅读全文自从 xLog 引入了 Dark Mode 以后,因为大大降低了对比度造成文字灰色可读性差,我就暂停使用了 xLog (同时暂停了写作和阅读)而期待官方更新。然而,数月过去了,依然没有丝毫改善(难道开发团队都没人用 Dark Mode 吗)…… 行吧,自己动手,丰衣足食🌚 关闭自己博客的 Dark Mode 因为 xLog 不支持自定义 js,故无法直接修改 xLog 的 Dark Mode 判断逻辑。因此,只能强行将 Dark Mode 模式下的 CSS 覆盖成 Light Mode 的。 警告 使用该功能意味着需要时刻跟随 xLog 的官方样式更新,否则会造成博客效果变差。如果使用请自行承担相关风险。 下面的 CSS 尽可能覆…
阅读全文