v2ex_hot_2025-12-24

V2EX 热门帖子

1. React 缺失的“M”层:我开发了 Zenith,重塑完整的 Model

迷失的 Model

我们在谈论 React 时常说 UI = f(State)。React 完美地解决了 View (视图) 层,但对于 Model (数据模型) 层,社区的探索从未停止。

从 Redux 到 Hooks ,再到 Zustand ,我们越来越追求“原子化”和“碎片化”。这带来了极简的 API ,但也带来了一个严重的副作用:Model (模型)的破碎

你是否遇到过这种情况:

  • 数据 (State) 定义在一个 create 函数里。
  • 计算 (Computed) 散落在组件的 useMemo 或各种 Selector 函数里。
  • 行为 (Action) 散落在 useEffect 或各个 Event Handler 里。

“Model” 消失了,取而代之的是散落在各处的逻辑碎片。

Zenith:重塑 Model 层

Zenith 注重于高内聚( Co-location ) 的开发体验,可以把数据 (State)计算 (Computed)行为 (Action) 紧紧地封装在一起。

Zenith = Zustand 的极简 + MobX 的组织力 + Immer 的不可变基石

核心特性:“诚实”的 Model

1. 完整的模型定义 (Co-location)

在 Zenith 中,你不需要在闭包里用 get() 去“偷窥”状态,也不用担心 set 的黑盒逻辑。一个 Store 就是一个完整的、逻辑自洽的业务单元。

class TodoStore extends ZenithStore<State> {
  // 1. 数据 (State)
  constructor() {
    super({ todos: [], filter: 'all' });
  }
​
  // 2. 自动计算属性 (Computed)
  // 告别手动写 Selector ,告别 useMemo
  // 像定义原生 getter 一样定义派生状态
  @memo((s) => [s.state.todos, s.state.filter])
  get filteredTodos() {
    const { todos, filter } = this.state;
    // ...逻辑
  }
​
  // 3. 行为 (Action)
  // 诚实地使用 this ,UI 层绝不能直接碰 State
  addTodo(text: string) {
    this.produce((draft) => {
      draft.todos.push({ text, completed: false });
    });
  }
}

2. 链式派生:自动化的数据流

MobX 最让人着迷的是它的自动响应能力。Zenith 完美复刻了这一点,但底层依然是 Immutable Data

你可以基于一个计算属性,派生出另一个计算属性( A -> B -> C )。当 A 变化时,C 会自动更新。我们不再需要手动维护依赖链,也不需要在组件里写一堆 useMemo一切计算逻辑都收敛在 Model 内部

3. 组件即视图 (View):像 Zustand 一样简单

定义 Model 虽然严谨,但在组件里使用必须极致简单。Zenith 提供了完全符合 React Hooks 习惯的 API 。

你不需要高阶组件( HOC ),不需要 Connect ,只需要一个 Hook:

const { useStore, useStoreApi } = createReactStore(TodoStore);
​
function TodoList() {
  // ✅ 像 Zustand 一样选择状态
  // 只有当 filteredTodos 变化时,组件才会重渲染
  const todos = useStore((s) => s.filteredTodos);
  
  // ✅ 获取完整的 Model 实例 (Action)
  const store = useStoreApi();
​
  return (
    <div>
      {todos.map((todo) => (
         // UI 只负责触发意图,不负责实现逻辑
        <div onClick={() => store.toggle(todo.id)}>
          {todo.text}
        </div>
      ))}
    </div>
  );
}

4. 工程化的胜利

Zenith 不仅仅是一个状态库,它内置了 History (撤销/重做)DevTools 中间件。

我用它构建了 domd markdown WYSIWYG 编辑器,能够支撑 20000 行文档流畅编辑。

结语

Zenith 的出现不是为了争论 FP 好还是 OOP 好。

它只是想告诉你:当你的项目逻辑日益复杂,当你受够了在几十个 Hook 文件中跳来跳去寻找业务逻辑时,你值得拥有一个完整的、诚实的 Model 层。

让代码重归秩序。

Github: https://github.com/do-md/zenith

欢迎 Star 🌟 和 Issue 交流!

作者: jaydenWang | 发布时间: 2025-12-24 01:08


2. AI 是不是基本杀死了 blog

特别是技术型博客,类似 CSDN ,基本上在 AI 面前一文不值。 其他的博客,也好不到哪里去。

作者: 8675bc86 | 发布时间: 2025-12-23 08:18


3. 我连续熬了三晚为“雪球”写了一个 Tampermonkey“用户脚本”,分享给 V 友,会很“高兴”看到很多人使用

XueqiuResourceLinks

XueqiuResourceLinks (雪球 · 第三方资源扩展)是一个 Tampermonkey/Greasemonkey 用户脚本:实现在雪球股票详情页侧边栏,添加相应“个股”的“第三方资源”,例如上证 e 互动、深交所互动易、SEC: EDGAR 、港交所披露易、Stocktwits 等,点击即可跳转到对应个股的第三方资源站点,以此便利研究,提升生产力…当下“已经”和“正在”扩展出比示例图片“更多”的资源,使用有惊喜,enjoy···

历史效果图--美股 历史效果图--A 股


功能特性

  • 自动解析股票交易所和代码

  • 支持:

    • 上证 e 互动
    • 深交所互动易
    • SEC: EDGAR
    • 港交所披露易
    • 等等等…. 使用有惊喜
  • 第三方资源可扩展,通过数组轻松添加更多链接

  • 使用 localStorage 缓存请求结果,减少网络请求

  • 样式统一,展示美观


安装方法

  1. 安装 TampermonkeyGreasemonkey 浏览器扩展
  2. 点击 安装脚本 按钮,自动添加到扩展中
  3. 打开雪球股票详情页,即可在侧边栏看到“第三方资源扩展”组件

更新与反馈


许可证

MIT License

作者: investor | 发布时间: 2025-12-23 23:18


4. 图片分层 AI 模型都开源了, 5 天 800Star,不搞一把?

之前好多搞 AI 的开发者问我怎么实现图片自动分层? 你们搞 AI 的都不懂,我一个做图片编辑器的更不懂了。

AI 开源模型

这不前两天阿里云刚刚开源 Qwen-Image-Layered 模型,可以实现图片分层功能,5 天 800 Star 了。

https://github.com/QwenLM/Qwen-Image-Layered

1 预览图.png

1 预览图.png

简单说,它能把任何一张普通的图片,像剥洋葱一样,自动分解成多个独立的图层!比如一张有文字、有人物、有背景的图,AI 能自动把人物、文字、背景都分开,每个图层都带透明通道。你想给人物换件衣服、移动下位置,或者改个文字,再也不用痛苦地用 PS 一点点抠图了,直接对对应的图层操作就行,完全不影响其他部分。这个模型甚至支持无限递归分解,把一个图层再继续细分,精度超高! 1 预览图.png

怎么用

这么强的 AI 能力,怎么把它用起来呢?总不能只让用户一个一个拼图层把?结合这款开源图片编辑器。

vue-fabric-editor !这是一个基于 Vue 和 fabric.js 开发的、功能非常完善的开源图片编辑器。也有 7.4K Star 了,它本身就有图层管理、PSD 解析、历史记录、各种滤镜等专业功能,界面友好,插件化架构,特别适合二次开发。

https://github.com/ikuaitu/vue-fabric-editor

1 预览图.png

1 预览图.png

结尾

用 Qwen-Image-Layered 做 AI 大脑,自动分析图片生成分层结构;再用 vue-fabric-editor 做编辑器和交互界面,让用户可以直接对这些 AI 生成的图层进行可视化操作。

感兴趣的朋友赶紧去试试吧!用开源技术结合顶尖 AI ,下一个爆款应用可能就出自你手!

作者: nihaojob | 发布时间: 2025-12-24 02:08


5. GLM-4.7 上线并开源:更强的编码

GLM-4.7 上线并开源。 新版本面向 Coding 场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。

目前,GLM-4.7 已通过 BigModel.cn 提供 API ,并在 z.ai 全栈开发模式中上线 Skills 模块,支持多模态任务的统一规划与协作。

Coding 能力再提升

GLM-4.7 在编程、推理与智能体三个维度实现突破:

  • 更强的编程能力 :显著提升了模型在多语言编码和在终端智能体中的效果; GLM-4.7 现在可以在 Claude Code 、TRAE 、Kilo Code 、Cline 和 Roo Code 等编程框架中实现“先思考、再行动”的机制,在复杂任务上有更稳定的表现。
  • 前端审美提升 :GLM-4.7 在前端生成质量方面明显进步,能够生成观感更佳的网页、PPT 、海报。
  • 更强的工具调用能力 :GLM-4.7 提升了工具调用能力,在 BrowseComp 网页任务评测中获得 67.5 分;在 τ²-Bench 交互式工具调用评测中实现 87.4 分的开源 SOTA ,超过 Claude Sonnet 4.5 。
  • 推理能力提升 :显著提升了数学和推理能力,在 HLE (“人类最后的考试”)基准测试中获得 42.8% 的成绩,较 GLM-4.6 提升 41%,超过 GPT-5.1 。
  • 通用能力增强 :GLM-4.7 对话更简洁智能且富有人情味,写作与角色扮演更具文采与沉浸感。

Code Arena:全球百万用户参与盲测的专业编码评估系统,GLM-4.7 位列开源第一、国产第一,超过 GPT-5.2 。

在主流基准测试表现中,GLM-4.7 的代码能力对齐 Claude Sonnet 4.5: 在 SWE-bench-Verified 获得 73.8% 的开源 SOTA 分数; 在 LiveCodeBench V6 达到 84.9% 的开源 SOTA 分数,超过 Claude Sonnet 4.5 ; SWE-bench Multilingual 达到 66.7%(提升 12.9%); Terminal Bench 2.0 达到 41%(提升 16.5%)。

真实编程场景下的体感提升

在 Claude Code 环境中,我们对 100 个真实编程任务进行了测试,覆盖前端、后端与指令遵循等核心能力。结果显示,GLM-4.7 相较 GLM-4.6 在稳定性与可交付性上均有明显提升。

GLM Coding Plan

  • Claude Code 全面支持思考模式,复杂任务连续推理与执行更稳定
  • 针对编程工具里的 Skills / Subagent / Claude.md 等关键能力定向优化,工具调用成功率高、链路可靠
  • Claude Code 中视觉理解能力开箱即用;内置搜索与网页读取,信息获取到代码落地一站闭环
  • 架构设计与指令遵循更强,明显降低长上下文下的“幻觉式完成 / 跑偏”,交付质量更可控

作为本次升级的首个体验权益,所有购买套餐的用户将获得「体验卡」礼包,可邀请 3–7 位新用户免费体验 7 天套餐权益。

领取链接:[https://zhipuaishengchan.datasink.sensorsdata.cn/t/kc]

作者: Zhipuai | 发布时间: 2025-12-23 07:17


6. 比较好奇,为什么昨晚快手的审核手段失效?

很神奇的一个事情,持续时间也不算短

作者: Dabney | 发布时间: 2025-12-23 00:51


7. 写了个 Agent Skills Marketplace 的 VS Code extension

前几天和大家分享了我写的 Code Runner Agent Skill:

https://github.com/formulahendry/agent-skill-code-runner

发现大家对 Agent Skills 的关注度还是很大的。

于是,我就想着是不是能把 Code Runner Agent Skill 发布到哪个 Agent Skills Marketplace 上面。

结果,搜索了一番,似乎并没有找到一个很好用的 Agent Skills Marketplace 。

所以,我就自己就用 AI 写了个 Agent Skills Marketplace 的 VS Code extension 玩玩。

还得是 AI ,三下五除二,很快就写好了。

如此一来,在 VS Code 中,搜索🔍、安装📦、运行🏃 Agent Skills ,一气呵成,如丝般顺滑~

关于 Agent Skills 是啥,之前的文章已经详细介绍了:

Code Runner Agent Skill 来了!

欢迎试用或者围观 Agent Skills Marketplace for VS Code:

https://github.com/formulahendry/vscode-agent-skills

代码完全开源!

作者: formulahendry | 发布时间: 2025-12-24 00:11


8. Linux 漫谈(一)

Linux 漫谈

虽然标题是 Linux 相关,这篇文章和之后的续篇都会将三个主流的系统一起做对比,特别是设计图形界面和桌面的部分。其实鸿蒙系统也非常值得拿来一起对比,但我考虑到这个系列的切入视角是近三十年的发展史,所以就刻意回避了。

选择发布在 Linux 板块,主要还是为了避免无意义的口水仗。以我这些年的经历来看,Linux 用户的典型画像一方面是沉默的少数派,另一方面又往往是用爱发电的主力。所以互联网上的资料常常处于两种极端,要么很专业但要求读者有足够的认知门槛,要么就是语焉不详,甚至可能充斥着错误或者误导性的信息。

我写这篇文章的目的只是简单的想要回答一些为什么类型的问题,尽可能消除一些常见的技术误解。很早之前我就有写这个系列的构思,当时感觉如果要做完整清晰的论述,篇幅会非常长同时依赖大量的基础内容做铺垫。现在有了 AI 的辅助,我就将文章定位为 AI 的提示词,梳理好大纲脉络即可。

另一个目的算是我的私心,这篇文章也是阐述“为什么开发者应当学习 Linux”这样一个观点。我并不急于回答这个问题,而且我相信读过文章的你一定会有自己的理解。至于我把我的理解分享出来这个行为的动机也很简单,我从 Linux 上学到了很多,这些知识经验很大程度上影响了我的职业经历,某种程度上也影响了我的价值观,所以我愿意将这些精神财富再次分享出来。

0x00 前言

我先拿一个可能是误解最深的话题作为引子:“Wayland 协议加剧了 Linux 桌面的碎片化”。很多人会认为 Wayland 协议应当像 Windows/macOS 那样有个统一的标准,而不是现在松散、混乱的实现状态。

如果我告诉你这恰好就是 Wayland 追求的设计目标呢?你可能觉得我或者 Wayland 至少有一个疯了。如果我告诉你“提供机制而非策略( Mechanism vs Policy )”恰恰是 X 提出的,而 Wayland 继承了相同的精神内核,估计 X 的支持者也坐不住了吧?

详细阐述问题需要比较多的铺垫,之后的篇幅会做相应的解释。

如果你看过我之前发的文章、帖子,你可能会注意到我经常会用一个词“哲学”。所谓哲学就是回答为什么,如果再直白一点就是“小孩子才做选择,成年人当然是我全都要”的反面,技术领域中很多时候谈论好与坏,本质上是在谈论取舍。哲学的意义再具象化一点可以表述成“设计理念”,它往往有着具体的应用场景和时代背景,以借鉴总结为目的对错、好坏讨论是有意义的,为了宣泄情绪争个输赢属实没有必要。

当然也不是说就没有统一且普适的评判标准了,我之所以喜欢谈哲学就是因为,设计理念及其对应的实现手段是能体现出设计者智慧的。可以这样理解,人类历史上出现过的科学技术到今天可能都被新技术替代了,但是类似数学抽象、以及对物理世界的认知,一起构成了如今的科学技术框架。思想智慧的光芒是不会因为历史进步而被掩盖,反而会更加闪耀。

日常中我们也很少拿如此严苛的标准来评判一般事物,毕竟时间才是最强的检验手段,经得起时间考验的才是大智慧。

如果以图形系统作为后现代操作系统的分界线,目前 Linux/Windows/macOS 差不多都经历了二三十年的发展。关于操作系统好坏的争论一直没有停过,且很少有人讨论好在哪里或者坏在哪里。又或者是没人回答这类问题:那么多开发者竟然解决不了某某问题、为什么某某系统就做不到等等。

与其说我要系统性回答各种疑问或者解析各个误解的原因,不如说是我要回答“为什么某某操作系统会是现在这个样子”,或者“它为什么要这样设计”。三个系统演化成今天的形式,简单说和它们最初的设计思路是分不开的,最初的框架定型之后,想要再改就很困难了,谁都离不开一层层打补丁,这个打补丁的过程又重新巩固了原有的设计。

我相信以今天的视角来看,我们是能够给出比较客观的评判的。

0x10 现代操作系统的基础

为什么需要操作系统?

这个问题似乎简单到不需要思考,那我为什么要把它单独拿出来?因为在我看来,这个问题的答案就如同逻辑三段论中的大前提,后续一切讨论都建立在这个大前提之上。

在操作系统出现之前,可以认为计算机是“单任务”的,即单一程序直接在硬件上运行,通过人工外部手段切换应用程序。随着硬件技术的进步,彼时的开发者迫切需要某种能够让多个应用程序以纯软件的方式共享硬件资源的机制。

这个机制并不完全等同于现代意义上的“多任务”,但在逻辑层面上,二者都是基于“时分复用”这个思想的,甚至人工“单任务”也可以理解为时间片尺度非常大的复用系统。

回到计算机硬件上,核心计算单元 CPU 只是机械地按照程序计数器( PC )以及栈指针、寄存器中的数据来执行相应的指令,如果要实现在多个应用程序之间进行切换,实际上只需要实现这个环境保存及恢复机制即可。

这就是对于操作系统最原始的需求。

0x11 内核

如果说图形操作系统的分界线是图形界面,那么现代操作系统的分界线就是内核。所以现在的问题是内核又是怎么来的,要解决什么需求。

现在操作系统的雏形源自 Unix ,估计绝大多数人并不知道它的原始含义。有个戏谑的说法是它代表 uniplexed 也就是单路非复用的意思,与它相对的是 multiplexed 今天一般叫做多路复用,而 Unix 取这个名字就是为了与当时名为 Multics 操作系统的设计做区分。

尽管 Multics 在商业和软硬件技术上都很失败,但它的理念是超越时代的,所有 Unix 之后的现代操作系统都是建立在它的设计思路之上。

内核或者更准确地说保护环( Protection Rings )这个概念是 Fernando Corbato (图灵奖得主)在六十年代提出的,在当时的背景下,它旨在解决原始操作系统面临的安全性问题。Multics 的设想是,将庞大昂贵的计算机安全、方便地共享给多人使用,所以提出了环这个概念。同时 Multics 和通用 GE-645 的合作,增加了硬件环支持也是第一次软件需求影响硬件设计的例子,后面这样软硬件相互影响进化的例子就非常普遍了。

为了避免某个应用影响到其他程序,或者影响到操作系统本身,就让操作系统运行在 Ring0 最高权限,而应用程序运行在 Ring3 权限。同时为了解决内存昂贵且管理复杂的问题,Multics 还提出了虚拟内存的概念,包括动态链接技术在内的很多设计都是源自 Multics 操作系统。(还包括 ACL 访问控制列表概念,以及 / 代表的树状目录结构,这里就不展开了)

虽然 Multics 的理念很先进,但受限于当时的技术水平,实现层面却比较失败。后来 Ken Thompson 和 Dennis Ritchie 离开项目,发展出了 Unix 项目。对于环的模型也简化成了 Kernel/User 空间的划分,操作系统就演变成了内核和用户空间辅助程序的组合。

为了准确表述起见,后面提到操作系统的时候都会以其内核的名字来称呼,Linux 自身就是内核名字,Windows 目前的内核依旧称作 NT ,而 macOS 内核的正式名称为 XNU(X is NOT Unix)。

0x12 设计哲学

是的,我又要谈哲学了。

从 Unix/Multics 的对比可以发现,即便理念相同,在具体实现上也会存在巨大的分歧。而从 XNU 这个名字,以及后续 Linux 这个名字,也能看出操作系统发展的脉络。对于不同的设计者而言,他们追求的理想目标不同,在满足操作系统这个基础需求时的解决思路也不同,这便是哲学上的分歧。在后面我们能看到不同的哲学对于操作系统发展带来的巨大影响。

由于 Unix 不在这个系列主要的讨论范围内,这里就总结一下 Unix 影响后世的几个重要哲学观念:

  • Do one thing and do it well. 和 KISS(keep it simple and stupid) 基本是一个意思,这个理念与 Multics 大而全的理念恰恰相反,影响了 awk/sed/grep 等等一系列软件的发展。

  • Worse is better. 这个理念的影响主要是 C/Lisp 的语言,前者是追求工程简单,后者追求形式正确。我更愿意称之为工程派和学院派,为什么 XNU 要强调自己不是 Unix ?因为它诞生于学院派,和 Lisp 一样都追求形式上的正确和美。

  • Everything is a file. Linux Torvalds 称这是 Ken Thompson 最优雅的设计,伟大无需多言。

我觉得到这里已经很明显了,哲学观点属于润物细无声的存在,影响的是对同样事物的不同看法,进而影响做同样事情的不同选择。还是那句话,好和坏都是相对的,对错不重要,为什么更重要。

0x13 对比

铺垫了这么久,终于可以开始对比了。如果说继承 Unix 衣钵的 Linux 算作工程派,XNU 出身学院派(卡内基梅隆大学 Richard Rashid ),那么 NT 应当算作激进的先锋派。

顺便一提,NT 内核的核心设计是 Dave Cutler ,他主导设计了 VMS(Virtual Memory System),后来成为了 NT 虚拟内存的核心。他最出名的一句话是 Unix is a junk OS designed by a committee of PhDs。鄙视链真是无处不在啊……

在 Unix 诞生之后,操作系统内核的基本框架就确定了。现代内核无论是 Linux 还是 NT/XNU ,最基本的功能模块都包括任务调度和虚拟内存,只是实现层面存在差异。然而不管是哪一派,都不约而同将文件系统、网络栈和硬件驱动放到了内核中。

从技术上讲,Linux 是纯粹的宏内核( Monolithic )设计,而且 Linus Torvalds 对此和 Andrew Tanenbaum (微内核之父)有过一场辩论,Linus 认为在九十年代微型内核的性能开销是不可接受的。这种设计下所有的内核功能模块都运行在同一个地址空间。(一般现在说的纯微内核( MicroKernel )指的是 Minix/L4 这种,因为性能问题基本没有桌面应用,也就不展开了。)

至于 NT 和 XNU ,学术层面一般的说法是混合内核( hybrid ),因为它俩都是设计上的微内核,但也都在实现上采用宏内核的方案。

NT 内核的设计者 Dave Cutler 受微内核思想影响,将 NT 内核设计成了很多的子系统,比如 OS/2 和 POSIX 子系统,甚至后来 WSL(windows subsystem for linux) 和 WSA(windows subsystem for android) 都得益于这个设计,后来连 GDI 和 http 服务器也都塞进了内核。XNU 则基本上是把 BSD 的网络栈、文件系统实现直接链接进了内核。当然本质上,NT/XNU 还是和 Linux 一样只有一个地址空间的,只是它们不推荐像 Linux 一样自由访问。

真正的区别在于以下两个问题:

  • 是否将 IPC 放到内核里。 准确的说法应该是:内核各个部分之间依赖直接函数调用进行交互,还是依赖特定协议的 IPC 消息进行交互。

  • 是否将图形系统放到内核里。

在这两个问题上的不同抉择才是真正影响几个操作系统如今不同形式的根本原因,IPC 和图形系统恰恰也是对桌面体验影响最大的两个部分,如果要谈论桌面系统的话题,归根结底都会回到这两个系统的设计上。

说到底,这几个内核的追求都是一样的,既要保证安全,还要追求性能,但在这两个关键问题上走出了不同的路线。

PS 感谢各位没有让 AI 总结而是人工阅读。这会是一个比较长的系列,分开发布一方面是因为确实太长了,另一方面也是想根据反馈来调整后续内容的结构顺序和内容侧重。

作者: kuanat | 发布时间: 2025-12-23 21:45


9. 微软要在 2030 年前用 rust 重构 c/c++代码

https://www.thurrott.com/dev/330980/microsoft-to-replace-all-c-c-code-with-rust-by-2030

Microsoft is taking an impressive step in modernizing its biggest codebases and will eliminate all C/C++ code by the end of the decade, replacing it with Rust.

Imgur

作者: fulln | 发布时间: 2025-12-23 09:45


10. 如何免费搞定 trae pro?

rt 发现还蛮不错,要想邀请别人,或者被邀请就可以获得

作者: laojuelv | 发布时间: 2025-12-24 02:08


11. 程序猿你们都怎样去学英语口语的,想去外企,求学习途径

程序猿你们都怎样去学英语口语的,想去外企,求学习途径

个人英语听力不差,看入门级别的美剧基本上可以啃生肉

但是英语交流很弱,缺少环境,求大佬们赐教~~~~

作者: liang37038 | 发布时间: 2025-12-23 09:29


12. 三星手机和一加手机哪个更推荐?续航都怎么样?(不买旗舰)

作者: Zarhani | 发布时间: 2025-12-23 04:27


13. 基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor

前言

ELK 的一大缺点就是这东西最初是没有登录机制的,只要拿到了 url 地址,kibana 看板谁都可以访问一下。后来 ELK 自带了一套 xpack 进行登录认证,可是除了账户名密码登录这种最原始的方法,剩下的高级功能,比如 oauth, oidc, ldap ,统统都是收费的…..总不能给每个人都专门搞一个 kibana 账户名密码吧……

所以呢,这里有一个基于 casdoor 的 elk 鉴权解决方案,不要钱,开源的,还有人维护呢~。Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,而 casdoor/elk-auth-casdoor 这套解决方案,则是一个 反向代理,他可以拦截所有未经登录的前往 elk 的 http 访问流量,并且引导未登录用户进行登录,而且这个反向代理对已登录用户是完全透明 的。

仓库地址 https://github.com/casdoor/elk-auth-casdoor

QQ 群:645200447

如果您有更多相关的特殊需求可以加群,我们会有专人对接~ (可以联系 ComradeProgrammer )

casdoor 是什么

Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,简单点说,就是 Casdoor 可以帮你解决 用户管理 的难题,你无需开发用户登录注册等与用户鉴权相关的一系列功能,只需几个步骤,简单配置,与你的主应用配合,便可完全托管你的用户模块,简单省心,功能强大。

仓库地址: https://github.com/casbin/casdoor

演示地址: https://door.casbin.com/

官网文档: https://casdoor.org/

QQ 群:645200447

Casdoor 还支持 ldap ,saml 等诸多功能…..

Casdoor 目前作为 Casbin 社区项目统一使用的鉴权平台,项目已开源,希望得到大家的一些建议和 Star~,我们会及时跟进反馈并改正问题哒

Casdoor 又有哪些特性?

  • 支持普通的账户密码注册登录,也支持各种常见的第三方认证,例如 GitHub 、Facebook 、Google 、Wechat 、QQ 、LinkedIn 等等,截止目前共 9 个平台,并在不断听取用户建议对更多的平台提供支持。
  • 管理方便。Casdoor 内部将模块分为了 5 大类,Organization 、User 、Application 、Token 和 Provider 。可以同时接入多个组织,组织下有不同应用,用户可以通过应用或组织分类,单独管理任何组织、应用或用户的 Token 令牌,轻松管理复杂系统,目前已部署在 Casbin 社区各种系统当作鉴权平台。
  • 自定义程度高。Casdoor 可以随意修改登录方式,例如是否允许密码或第三方登录,自定义应用的注册项数量,是否启用两步验证,以及是否允许各个 Provider 登录、注册等等,高度可插拔。
  • 具备 Swagger API 文档。清晰的 API 介绍,无需阅读源代码即可直接方便调用各个 API 接口,提供定制化功能。
  • 前后端分离架构,部署简单。作为统一认证平台,除了性能,稳定性,新特性之外,易用性也是考量的重要标准,Casdoor 后端使用 Golang 语言开发,前端使用 React.js 框架,使用者只需启动后端服务,并将前端工程文件打包,即可直接使用,操作简单,上手难度低。 …

作者: Casbin | 发布时间: 2024-03-08 02:33


14. 我的 app 被人干了,颠覆了我的认知!

上周我 app 用户群来了一位不速之客,发了一张图片

image

我一看,我艹,这不被破解了嘛。 随即我踢了他,然后当天下午加了他 wx ,他同意了。 整个聊天过程没有急眼,他还表明破解的这个包没有流传出去。 因为那个人只愿出几十块钱,他肯定不会成交的,纯试试水,就破了。

从聊天记录我总结出以下几点:

1:他不懂安卓代码,纯靠几个工具 [其中有 MT 管理器[狗东西,开发者天敌]] 就能快速重签打包,我在 Java 和 cpp 中有几个签名验证的埋点,他依然能打包,并正常运行。

2:我的 app 核心功能要用到安装包中的本地带密 zip ,解压密码由后台配置信息接口返回,每个版本的安装包中的 zip 解压密码都不一致,所以我故意改了后台配置信息接口中的密码,他破解的老包功能依然正常使用,我轻描淡写问了他,他说就一个工具就能搞定。

3:他还能破包后加卡密弹窗,说这是基操。视频链接: https://m.okjike.com/originalPosts/69493b881cc9bc8e54a2608d?s=eyJ1IjoiNjM1Nzg4ZjM0N2RkNjRhN2Y3Y2RiMTk0In0%3D

经过几天的 v 站查帖和看 B 站视频,我知道业务逻辑在本地是无法完全防破解的,只是有几点疑问。

1:加卡密弹窗的云注入平台为爱发电?就没人投诉吗?

2:他破解的包为什么不受后端动态解压密码控制?如果绕过校检本地如何解压成功呢?

作者: 92Developer | 发布时间: 2025-12-22 12:50


15. 老婆说悬浮时钟有广告我来搞一个

  • 无网络权限,无后台
    • 目前测试平台只有小米 红米
    • 工具:Gemini3
    • 平台:flutter

通过网盘分享的文件:rush-1.0.apk 链接: https://pan.baidu.com/s/1BMJTYaEAvFyoxi6jrVKdRg?pwd=rfkt 提取码: rfkt 复制这段内容后打开百度网盘手机 App ,操作更方便哦

作者: lostsquirrelX | 发布时间: 2025-12-23 09:11


16. 极简的图库项目,兄弟们帮忙看看还有哪些优化的点?

项目的开始是用 N8N 处理相关流程 时有很多图片处理的需求,找了很多开源项目有的比较老无人维护,有的需要购买 PRO 版本才能有更多的功能。以上种种原因吧,再加上自己也有 NAS ,所以写了一个比较自由开放的图床项目。

目前是无数据库的状态,直接扫描的指定文件夹,感觉这样更灵活、轻量、好迁移。但是也限制了很多功能无法开发实现。

项目地址: https://github.com/qazzxxx/cloudimgs

支持上了 PicGo 插件直接安装使用 PicGo 插件

顺手的话麻烦给点个 star 鼓励一下,多谢啦🙏

登录页面 云图 桌面端预览

图片管理页面 云图 桌面端预览

整页上传 云图 桌面端预览

开放接口页面 云图 桌面端预览

作者: qazzxxx | 发布时间: 2025-12-23 13:31


17. 不够“坦诚”的 Zustand:我们是否为了函数式而函数式?

引言

Zustand 是目前 React 生态中最流行的状态管理库之一。它以极简著称,也是我个人非常喜欢的库。 但在长期的使用中,我常常产生一种违和感:我们在一个名为“函数式”的库里,费力地模拟着面向对象。

那个无处不在的 get()

来看看经典的 Zustand 写法:

const useStore = create((set, get) => ({
  count: 0,
  inc: () => set({ count: get().count + 1 }),
  actionB: () => {
    // 调用另一个 Action
    get().inc(); 
    // 获取当前状态
    const val = get().count;
  }
}))

仔细审视这个 get()

  1. **它就是 this**:它的作用就是访问当前实例的上下文。
  2. 它是“二等公民” :你必须显式地调用它 get(),而且它打破了 JS 引擎对 this 的自然优化。
  3. 心智负担 :在写复杂逻辑时,你满屏都是 get().xxx,这并不比 [this.xxx](http://this.xxx) 优雅,反而增加了一层函数调用括号的视觉噪音。

那个黑盒般的 set

set 函数的设计初衷是好的(提供类似 setState 的原子更新),但在复杂场景下,它显得不够“坦诚”:

  1. 语义模糊set 隐藏了更新的细节。是合并?是替换?是深拷贝?你必须去查文档或看源码才能确定它是 “Auto Merging” 的。
  2. 逻辑断层 :当你想复用一段逻辑(比如 Private Method )时,你发现你很难在 create 的闭包里优雅地定义私有辅助函数,往往只能写在外面,破坏了 Store 的内聚性。

为了函数式而函数式?

我们推崇函数式编程( FP ),是因为它有 纯函数无副作用引用透明 等数学上的美感。

但 Zustand 的 Store 定义是纯函数吗?显然不是。它是一个包含了状态( State )和行为( Action )的容器 。 在计算机科学中,状态 + 行为 = 对象( Object )

既然我们本质上是在构建一个对象,为什么要回避 JS 语言原生提供的、经过几十年打磨的构建对象的最佳工具——Class

我们为了避嫌 “OOP”,发明了一套 (set, get) => ({...}) 的 DSL 。这不仅牺牲了 Class 的继承、属性访问器( Getter/Setter )等高级能力,还增加了一层理解成本。

这是否是一种形式上的函数式正确 ,而非工程上的务实选择

另一种可能性

如果在 React 状态管理中,我们不再视 class 为洪水猛兽,而是承认它作为 “Model” 载体的合理性,会发生什么? 这或许值得我们深思。

作者: jaydenWang | 发布时间: 2025-12-23 02:39


18. 讨论个问题:该不该重写 equal 和 hashcode

和 AI 交流的时候产生的一个问题:

AI 的大致结论是,对于业务类,如果存在明确的唯一标识,比如 ID ,那么应该重写这两个方法,这样在做哈希表之类的时候才能直接使用业务类。

但我认为的是,因为当把一个对象放进哈希表的时候,我会默认它的 hashcode 方法是默认的,也就是每个对象有唯一的哈希值。如果重写了 hashcode ,那么在使用的过程中如果不知道这个类复写了 hashcode ,那么就容易导致代码问题。

所以,我想知道做 java 后端的,你们一般会重写吗?

AI 的一部分原文:

如果抛开 “数量占比”,聚焦于「开发中需要重点设计、保证正确性的核心场景」,重写的频率会远高于 “不重写” 的核心场景,原因如下:

核心类必重写:所有承载业务数据的核心类(如 User 、Order 、Goods 等),几乎 100% 需要重写 —— 这是保证哈希集合正常工作、业务对象唯一性判断、序列化后比对等核心功能的前提,不存在 “可选” 的空间;

重写的 “重复性” 更高:一个项目中,数据承载类的数量虽少,但每个类的开发都必然包含 “重写 equals/hashCode” 这一步(无论是手动生成、Lombok 注解还是 Record 类),属于 “必做操作”;而不重写的类,只是 “无需额外操作”,并非 “主动开发行为”;

工具的普及佐证高频需求:Lombok 的 @EqualsAndHashCode 、Java 16 + 的 Record 类(默认重写)、IDE 自动生成功能,这些工具的广泛使用,本质是因为 “重写” 是开发中的高频需求,才会有大量工具来简化这一操作。 

作者: WngShhng | 发布时间: 2025-12-23 07:50


19. 做给自己的一款 RSS Reader

支持手动订阅、导入\导出 OPML ,增加了一个记录笔记的功能,文章内选择内容记笔记,支持对笔记进行注释。目前笔记导出、文章保存到三方平台开发中……

YakReader YakReader

作者: 0oo0 | 发布时间: 2025-12-23 07:55


20. 各大厂是怎么做终端管控的?

最近公司在做防泄密和合规,已知对于 Windows 来说最好的方案是 AD 域,mac 毫无疑问是 MDM+APNs+ADE
但是有一个特殊的需求,希望能有一个平台可以同时解决两个系统的管控,管控项如下:

1.软件黑白名单
2.外设管控( USB 管控)
3.终端网络管控
4.要具备杀毒和防护功能
5.屏幕监视( emm )
6.文件审计
7.支持远程锁定

JAMF 、IOA 、卓豪、IP-Guard 、Kandji ,都调研过了,没法一个平台满足,只能搭配
那么问题来了,国内有什么厂商的产品能同时做到这些,或者有无更好的方案?

作者: JiMuChan | 发布时间: 2025-12-23 04:06


21. 现代 React 应用卡顿的主要原因是什么?组件库 vs 重渲染机制

最近在优化一个中大型 React 项目,遇到了一些性能问题,想请教下各位的经验。 背景:

React 19 + TypeScript 使用了某主流 UI 组件库(Ant Design) 页面复杂度中等,有表格、表单、图表等

问题: 应用在某些场景下会有明显的卡顿感,比如:

输入框打字有延迟 列表滚动不流畅 弹窗打开/关闭有掉帧

我的疑问:

组件库的问题?

这些成熟的组件库内部实现是否会带来性能开销? 是不是应该考虑换成更轻量的组件库,甚至自己写?

React 重渲染机制?

是不是没用好 memo / useMemo / useCallback? 状态管理不合理导致大范围重渲染?

还是两者都有?

作者: SonicKang | 发布时间: 2025-12-22 13:28


22. 从文档管理到可对话知识库:个人知识库最佳实践方案

1. RAG 个人知识库和文档管理

  • 很多人都会遇到以下的问题:

    • 个人的技术资料和工作上累积的文档越来越多

    • PDF 、图片、文档散落在各个目录

    • 想找一份资料时只能靠文件名或全文搜索

    • 知道“某份文档里有答案”,但找不到在哪

一般来说,有大量资料和技术文档的资产的管理,要么放本地要么丢同步盘,可持久化好一些的解决方案就是部署文档管理系统管理(如 paperless-ngx 等).

1.png

那么当文档越来越多的情况下,自己已经几乎完全忘记文档内容时,如何查询和检索便成为了一个新的挑战.

随着现在大语言模型的发展,一个新的解决方向变得可行:

让电脑“读懂”你的文档,并且可以直接用自然语言提问

这就是 RAG 知识库,目前这类方案中,anythingllm 算是在强大和简单易用性中平衡的最好的产品了,而且最重要的是,部署简单和免费.

但 anythingllm 目前专注于 RAG 方向,对于原始文档的管理查找的功能有缺失,当我想在 anythingllm 中查看和管理原文档时,发现几乎难以实现,那么今天我这里探索总结的一个方案就是:

查看管理原始文档资产,并且同时同步成 AI 时代可对话、可推理的知识库

这篇文章,就是我最终探索出来的一套结合文档管理和 RAG 知识库优点个人知识库部署实践.可以方便的在 Linux 的个人服务器或者 NAS 上运行和部署.

2. 我选择了哪些组件

Paperless-ngx:文档资产管理

选择 Paperless-ngx 的原因非常明确:

  • 成熟稳定

  • 多文档格式支持, 有 OCR 能力( Tesseract )

  • 有完整的 API 接口

  • 支持规则化归档( document type / correspondent / tags )

  • 完全私有化

AnythingLLM: RAG 与 Workspace 的结合体

AnythingLLM 的优势在于:

  • Workspace 抽象非常适合“知识域”

  • 文档在 Workspace 中 embedding 后即可依赖 LLM 实现检索

  • 可对接本地 Ollama

  • 简单易上手

  • 完全私有化

Ollama:本地 LLM 模型以及 Embedder

大名鼎鼎的 Ollama 就不用多介绍了,这里我们跑两个模型,qwen3-embedding:0.6b 和 qwen3:4b,供 AnythingLLM 做 Embedder 和 LLM 使用(更加强大的 LLM 提供商很多,可以自行选择)

paper2anything:我开发的一款开源的同步工具

这个工具是我为解决以上问题开发的依据 paperless-ngx 的 tag 同步到 anythingllm 的 workspace 的工具,支持多 tag 增改删的同步,项目内有详细说明,没花几天时间写代码,只是共享一下方法并不是想要推广自己的项目,但还是欢迎使用并提 issue,求 star

项目地址:

👉 https://github.com/oserz/paper2anything

它做的事情包括:

  • 调用 Paperless API 获取文档元数据

  • 根据 tag 映射到 Workspace

  • 通过 AnythingLLM API 上传文档和 embedding 到 Workspace

  • 做增量同步(新增 / 修改 / 删除)

  • 本地保存同步状态

3. 部署方法和 Docker Compose 示例

  • Paperless-ngx 的部署,这是一份相对较齐全的可用配置(省略映射路径等选项):

    version: “3.9”

    services:
    broker:
    image: redis:7
    container_name: paperless-redis
    restart: unless-stopped
    volumes:
    - /your-path/redis:/data
    db:
    image: postgres:15
    container_name: paperless-postgres
    restart: unless-stopped
    environment:
    POSTGRES_DB: paperless
    POSTGRES_USER: paperless
    POSTGRES_PASSWORD: paperless
    volumes:
    - /your-path/pgdata:/var/lib/postgresql/data
    paperless:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless-ngx
    restart: unless-stopped
    depends_on:
    - db
    - broker

    ports:
    - “8888:8000”

    environment:
    # === 基础 ===
    PAPERLESS_REDIS: redis://broker:6379
    PAPERLESS_DBHOST: db
    PAPERLESS_DBNAME: paperless
    PAPERLESS_DBUSER: paperless
    PAPERLESS_DBPASS: paperless

    # === 管理员(首次启动)===
    PAPERLESS_ADMIN_USER: admin
    PAPERLESS_ADMIN_PASSWORD: admin123
    PAPERLESS_ADMIN_EMAIL: admin@example.com

    # === 时区 & 语言 ===
    PAPERLESS_TIME_ZONE: Asia/Shanghai
    PAPERLESS_DEFAULT_LANGUAGE: zh-hans

    # === OCR (屏蔽可能中文的 OCR 下载失败)===
    PAPERLESS_OCR_LANGUAGE: eng #chi_sim+eng
    PAPERLESS_OCR_CLEAN: clean
    PAPERLESS_OCR_MODE: skip
    # PAPERLESS_OCR_LANGUAGES: chi_sim

    # === 文件命名(新语法)===
    PAPERLESS_FILENAME_FORMAT: “//v2ex_hot_2025-12-24“

    # === 性能 ===
    PAPERLESS_TASK_WORKERS: 2
    PAPERLESS_THREADS_PER_WORKER: 2

    PAPERLESS_URL: (your domain address)

    volumes:
    - /your-path/data:/usr/src/paperless/data
    - /your-path/media:/usr/src/paperless/media
    - /your-path/consume:/usr/src/paperless/consume

  • 在 Paperless 中做的事情

完成部署后,你需要做三件事:

1. 创建管理员账号

2. 上传文档

3. 给文档设置或者分配标签

这些信息将直接决定后续知识库的结构

  • anythingLLM 的 docker compose 示例

    version: “3.9”

    services:
    anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped

    ports:
    - “3001:3001”

    environment:
    # === 基础配置 ===
    - STORAGE_DIR=/app/server/storage
    - JWT_SECRET=your_password
    - LLM_PROVIDER=ollama
    - EMBEDDING_ENGINE=ollama

    # === Ollama 配置(本机或同一 Docker 网络)===
    - OLLAMA_BASE_URL=http://your-domain-addr:11434

    # === 日志 ===
    - LOG_LEVEL=info

    volumes:
    # === 核心数据(必须迁移)===
    - /your-path/data/storage:/app/server/storage

    networks:
    - anythingllm-net
    networks:
    anythingllm-net:
    driver: bridge

  • ollama 的部署和设置说明

这部分比较简单,就略过不说了,推荐 ollama 拉取 qwen3-embedding:0.6b 的模型设置到 anythingLLM 的 embedder 中,这算是 embedding 的最强模型了.

LLM 模型设置可以根据自己的条件来,本人测试 qwen3:4b 在 markdown 文档下可用,但 pdf 文档基本上就是乱答了,国内用收费模型如 deepseek 都体验不错.

2.png

  • 同步设置和说明

同步工具下载地址: https://github.com/oserz/paper2anything/releases/

在同步之前,一定要先设置好 anythingllm 中的 embedder 等选项再开始同步

根据 config.json.example 中填入 url 地址,和 token 和 api_key,改名成 config.json 运行 p2a 即可

anythingllm 的 api_key 在设置 –> 开发者 API

paperless-ngx 的 token 在账户信息 –> API 认证字符串

或者运行./sync_loop.sh 即可按半小时一次更新同步内容

  • 最终运行效果图:

3.jpg

4.jpg

作者: oser | 发布时间: 2025-12-23 01:23


23. 被得力保险柜的逻辑蠢哭了

心血来潮买了个得力保险柜 老婆时不时放点首饰在里面,主要是之前东躲西藏太费脑子,买个保险柜专门放方便点。这是前话。

最近我住院,为了防止娃用电子产品,我就把投影仪的遥控器放保险柜里

结果奶奶告状说,娃周末还是召集了几个小伙伴偷看投影。

我们回来质问娃怎么能开我们的保险柜,本来我以为是不是上次放遥控器忘了关柜门,结果娃直接带我们到保险柜,用她的指纹直接打开了柜子。

我当时脑子就短路了,让她试了一下,果然能打开,随后我用我没有登记的手指,也能打开。

我就去问客服,客服说我没有设置指纹,所以所有指纹都能打开,我又翻了一下说明书,果然是设置指纹要按 5 次指纹,然后闪绿灯才行,我之前只是按一次,然后能打开就以为自己成功设置指纹了。所以我应该是没有设置成功指纹。

我被这个功能蠢哭了,难道没有设置指纹就默认所有指纹都能打开保险柜吗?那我设置密码又有何用?

作者: guoguobaba | 发布时间: 2025-12-22 15:52


24. 我宣布 ide 之战, 谷歌赢了

反正折腾一通, 也是嫖上了谷歌免费套餐了

能用一年了

昨天把其他 ide 全卸载了, 打算只专注用 antigravity 了

初步测试, 效果还是很满意得

小型项目, 打开自动执行, 基本不折腾

作者: iorilu | 发布时间: 2025-12-23 02:25


25. V 友们有处理过交易相关的场景么?如何保证一个交易能够正常的完成,或者是出现异常的时候进行及时的补救?

场景就是电商购物的时候, 或者积分充值和提现之类的, 如果是峰值的话怎么规避呢? 仅仅靠队列削峰么? 或者说怎么规避一些恶意的攻击呢?

之前做 2b 比较多, 很少接触到这一块, 感谢大佬们拨冗回答. 先磕为敬 orz.

作者: JoeJoeJoe | 发布时间: 2025-12-23 07:46


26. Gemini 3 Canvas 模式根据图片生成页面异常

直接把图片丢给 Gemini ,让它复刻页面。

如图:

之前虽然没法完全复刻,但是绝大部分能还原得差不多。现在生成的页面完全是八竿子打不着,尝试了几次都不行。

作者: frankbuf | 发布时间: 2025-12-23 08:04


27. gemini pro 的视频提取好像比 chatgpt 方便(网页)

之前没咋用过处理视频的 llm 。今天有一个 youtube 上 40min 的演讲想要提取演讲稿。

gemini 只要把链接给它,然后让它不断吐就行了。

chatgpt 好像不太行,比较费劲,agent 模式和普通模式都费劲八叉的搞不定。

作者: YanSeven | 发布时间: 2025-12-23 07:25


28. 大佬们 Windows11 最近开机没多久资源管理器就死掉,如何解决?

每次只能重启资源管理器

作者: revival83 | 发布时间: 2025-12-22 09:16


29. Nature vs Golang: 性能基准测试

nature 是一款较新的编程语言,其轻量简单,易于学习。在设计理念和运行时架构上参考了 golang ,同时有着更丰富的语法特性,更适用于业务开发,并在持续探索更广泛的应用领域。

性能是衡量编程语言核心竞争力的关键指标,接下来我们将从 IO 并发、CPU 计算、C 语言 FFI 、协程性能四个维度,并以 golang 作为基准对 nature 编程语言进行性能测试。

测试环境

配置项 详情
宿主机 Apple Mac mini M4 ,16GB 内存
测试环境 Linux 虚拟机( Ubuntu 6.17.8 ,aarch64 架构)
编译器 / 运行时版本 Nature:v0.7.0 ( release build 2025-12-15 )
Golang:go1.23.4 linux/arm64
Rust:cargo 1.85.0
Node.js:v20.16.0

所有测试均采用相同的代码逻辑实现,文中代码示例均以 nature 编程语言为例。

IO 并发

IO 并发是网络服务的核心能力,本测试通过 HTTP 服务端压力测试,综合考察语言的 IO 调度、CPU 利用率与 GC 稳定性。

nature 代码示例

import http  
  
fn main() {  
    var app = http.server()  
  
    app.get('/', fn( http.request_t req, ptr<http.response_t> res):void! {  
        res.send('hello nature')  
    })  
  
    app.listen(8888)  
}

ab 工具测试命令

ab -n 100000 -c 1000 http://127.0.0.1:8888/
  • -n 100000: 总请求数 10 万次
  • -c 1000: 并发数 1000

测试结果

可以看到 nature 在 HTTP 并发性能上超越了 golang ,这对于早期版本的编程语言来说可以说是不错的成绩。

由于 nature 和 node.js 均使用 libuv 作为 IO 后端,所以 node.js 也参与到基准测试中(libuv 线程不安全,node.js 和 nature 的事件循环均在单线程中运行),但 nature 作为编译型语言其并发处理能力远胜过 node.js 。

CPU 计算

使用经典的递归斐波那契数列计算 fib(45) 来测试语言的 CPU 计算与高频函数调用开销。

nature 代码示例

fn fib(int n):int {
    if (n <= 1) {
        return n
    }
    
    return fib(n - 1) + fib(n - 2)
}

测试方法

time ./main
1134903170./main  2.50s user 0.01s system 101% cpu 2.473 total

测试结果:

nature 和 golang 均采用自研的编译器后端,性能上也相差无几。而耗时高于 rust 的主要原因之一是两者在函数运行前进行了额外处理。

golang 采用了抢占式调度,不需要关注 GC safepoint ,但仍需要关注协程栈是否需要扩容,也就是下面的汇编指令

# more stack
f9400b90 	ldr	x16, [x28, #16]
eb3063ff 	cmp	sp, x16
540002a9 	b.ls	7869c <main.Fib+0x5c>  // b.plas

nature 采用了协作式调度,所以需要处理 GC safepoint 。但 nature 采用共享栈协程,所以不需要关心栈扩容问题。

# safepoint
adrp    x16, 0xa9d000
add     x16, x16, #0xeb0

ldr     x16, [x16]
cmp     x16, #0x0
b.ne    0x614198 <main.fib.preempt>

nature 的 safepoint 实现仍有优化空间,若后续采用 SIGSEGV 的触发模式,函数调用性能将会得到进一步提升。

nature 和 golang 采用了截然不同的调度策略和协程设计方案,这会带来哪些不同呢?不妨看看后续的测试 👇

C 语言 FFI

通过调用 1 亿次 C 标准库中的 sqrt 函数,测试与 C 语言的协作效率。

nature 代码示例

import libc  
  
fn main() {  
    for int i = 0; i < 100000000; i+=1 {  
        var r = libc.sqrt(4)  
    }  
}

测试结果

可以看到在 C FFI 方面,nature 相较于 golang 有着非常大的优势,这是因为 golang 的 CGO 模块有着非常高的性能成本,独立栈协程和抢占式调度设计与 C 语言难以兼容,需要经过复杂的处理。

而 nature 的共享栈和协作式调度设计与 C 语言更兼容,不仅仅是 C 语言,只要符合 ABI 规范的二进制库,nature 都能直接进行调用。

在高性能计算、底层硬件操作等场景中,nature 可无缝集成 C / 汇编编写的核心模块,弥补 GC 语言在极致性能场景下的不足,兼顾开发效率与底层性能。

协程

协程是现代并发编程的核心组件,本测试通过 “百万协程创建 + 切换 + 简单计算” 场景,评估 Nature 与 Golang 的协程调度效率、内存占用与响应速度。

nature 代码示例

import time  
import co  
  
var count = 0  
  
fn sum_co() {  
    count += 1  
    co.sleep(10000)  // ms, Remove this line if no sleep
}  
  
fn main() {  
    var start = time.now().ms_timestamp()  
    for int i = 0; i < 1000000; i+=1 {  
        go sum_co()  
    }  
  
    println(time.now().ms_timestamp() - start)  // create time
    
    int prev_count = 0  
    for prev_count != count {  
        println(time.now().ms_timestamp() - start, count)  
        prev_count = count  
        co.sleep(10)  
    }  
    println(time.now().ms_timestamp() - 10 - start) // calc time
    co.sleep(3000) // ms
} 

测试结果

语言 创建耗时(ms) 计算耗时(ms) 无 sleep 计算耗时(ms) 占用内存
Nature 540 564 170 900+M
Golang 1000 1015 140 2500+M

nature 的协程在综合性能上非常优秀,内存占用更是远低于 golang 。而这是建立在 nature 的协程调度器未进行优化的前提下,预计在后续的版本中 nature 的协程调度器会进一步优化,届时将会有更加亮眼的表现。

总结

这是一次非专业的性能测试,但在粗略的测试中,nature 编程语言展现出了超越预期的能力与潜力。作为早期的编程语言,其运行时和编译器还有着非常大的优化空间,在正式版本发布时性能将进一步提升。

以现在的性能表现来看,nature 无疑是值得关注和尝试的编程语言,尤其是在云原生、网络服务、API 开发等服务端开发领域。


这是 nature 编程语言的官网 https://nature-lang.cn/ 如果你感兴趣的话也可以加入讨论组,v ➡️ nature-lang

作者: weiwenhao | 发布时间: 2025-12-22 02:01


30. google 关联地区生效后就可以开通 gemini pro 了

根据 Google 的《服务条款》,您的账号与以下地区相关联:

香港

与您账号相关联的地区很快将发生变更。

新关联的地区:

  • 美国 - 加利福尼亚州
  • 生效日期:2025 年 12 月 26 日

另外,这个链接下的住址有什么影响吗?是否可以忽略掉 https://myaccount.google.com/address/home

作者: zhuangjia | 发布时间: 2025-12-23 02:31


31. gemini 好像不是用来配服务器的

装了个蜜罐,cowrie 搞了个 fail2ban 。我用的是 gem 提前塞了我的服务器配置情况。

需求就是 cowrie 临停转发过去的 22 端口,有人进去折腾就 ban 了。防火墙,他给我弄 iptables 和 ufw 冲突,没转发真实 ip 把 docker ip 封禁,日志的挂载目录搞错,权限有问题。总之各种问题不止出一次,最后搞了几个小时没搞好。

后来想想不对劲,虽然我没啥配置服务器经验,但是直接也自己看手册搞过 fall2ban 过滤规则,也成了,这买个 ai 想省事越来越费事。这还是我提前把服务器环境斗丢给他的情况。其他方面我对 gemini 还是很满意的,这事给我搞的头蒙,真不如自己看看手册就成了。

作者: glouhao | 发布时间: 2025-12-23 11:17


32. 有没有浏览器插件可以将网页视频投屏到 AndroidTV

edge 和 chrome 怎么没有 dlna 或者 chromecast 插件

作者: zachary99 | 发布时间: 2025-12-23 02:17


33. 如果想用 VS Code 搭配插件,去代替 IDEA,有没有啥好的方案推荐额

毕竟正版很贵,想着用 VS Code 搭配插件,能不能代替掉 idea

作者: BearCookie | 发布时间: 2025-12-22 23:36


34. 有没有大佬分享下软考备考建议?

各位大佬对高项备考有啥建议嘛,我是自己报个了班,看了两个月视频了,教材内容大致走了一遍,现在在一章一章的复习知识点及做练习题。计划这一轮把知识点过完,下一轮在边准备论文边做第三轮复习。不知道这种方案可不可行。明年 5 月考试不知道时间上来不来得及,还有 op 是白天上班,晚上回家学 1-2 小时,还有没有更好的建议。

作者: Croow | 发布时间: 2025-12-22 01:18


35. 年底想给妈妈换个手机, 2k 上下选什么?

日常使用没什么别的需求,主要就是刷短视频。

现在用的是小米,总是会下载一堆乱七八糟的 app ,然后各种问题,离的远又不方便帮忙处理,考虑 ios 可能会好点儿?

最近是看了 一加 ace6T 、荣耀 x70 、小米 k80 、turbo ,然后老款的 iphone14/15

帮忙给点意见 xdm

作者: Jacefan | 发布时间: 2025-12-17 07:46


36. Unity TMP 的 CJK 字体的 SDF.asset 字体文件会不断膨胀,是否应该加入 VCS?如果不加入 VCS 怎么同步字体属性给别人?

作者: drymonfidelia | 发布时间: 2025-12-22 21:18


37. 请问这样的 pixel 手机是什么问题?

咸鱼上买的 pixel9 pro xl ,别的都不错,屏幕据我目测也应该是原装,电池充电个位数,但是,商店里一直显示,设备未通过认证,重置等等都无法解决,从而不能用 chatgpt 等 app 。卖家很快就答应了退货。很好奇这是啥手机,翻新?

作者: CharlieChang | 发布时间: 2025-12-22 13:05


38. 独立服务器用起来怎么样?

我受够了花里胡哨的云了
回归传统
有没有人用过香港的独服,感觉怎么样?有没有推荐的

作者: shenyuzhi | 发布时间: 2025-12-22 01:53


39. [开源分享] JustHTMLs - 开源 HTML 工具集平台

最近做了一个开源的 HTML 工具集平台:JustHTMLs 。它的核心逻辑非常简单:所有的工具都是单文件的 HTML ,打开即用,没有任何构建步骤。

在线地址: https://htmls.dev/

GitHub: https://github.com/justhtmls/html-tools

工具细节

🚀 核心卖点 单文件设计:每个工具都是一个独立的 .html 文件,内联了 CSS 和 JS 。你可以直接右键另存为到本地,离线也能用。

隐私 100% 安全:所有数据都在你的浏览器本地处理,不会上传到任何服务器。处理敏感 JSON 或密码生成时非常安心。

无框架依赖:没有 React/Vue ,没有 npm/yarn 。纯原生 JS/CSS ,对开发者极其友好,想改功能直接看源码。

加载极快:手机端秒开,界面清爽,适配了移动端。

🛠 工具集覆盖(目前已收录 20+)

JSON 转换介绍

格式转换:JSON 转 YAML 、XML 转 JSON 、Markdown 转 HTML 。

开发者必备:JSON 格式化、正则测试器、哈希生成、JWT 解码、Cron 表达式、进制转换。

文本/实用:文本 Diff 、二维码生成、UUID 、密码生成器、时间戳转换等。

🖼 界面预览 json 格式化

🤝 欢迎反馈 目前还在持续增加新工具中,非常欢迎各位大佬:

提交新的工具请求( PR 极其简单,只需一个 HTML 文件)。

报 Bug 或提建议。

如果觉得好用,求个 Star 鼓励一下: https://github.com/justhtmls/html-tools

希望能帮到大家提高工作效率!

作者: woodyang | 发布时间: 2025-12-22 20:40


40. 本以为国产安卓这几年发展替代苹果没啥大问题,结果令人失望

本以为国产安卓这几年发展替代苹果没啥大问题,结果令人失望
今年一时兴起,换了 Oppo find X9Pro 512g ,用了一个多月,发觉几个问题还是比较严重的
1 pc 端 Oppo 用无线互联,我的相册 400 个 G 的视频和照片,点击相册照片(这个相册有四万多张照片)后,没有反应,无法显示照片。当点击照片不多的相册是可以显示。那这个互联的有什么意义?我如果要查找比较旧的照片,根本就打不开。
2 相册空间优化的问题,我有大概 400 个 G 左右的相册内容,买这个手机之前确认他有优化相册容量的功能。使用下来客服和我反馈,只有照片能存成缩略图,视频是不具备这个功能。然后问题是照片它显示使用缩略图可以节省 60 个 G 左右空间,实际只省了 10 个 G 的空间。客服反馈算法就是这样,时间很慢,要漫长等待。问题是我等了一个多月了,还是只省了 10 个 G
3 Oppo watch S 手表运动记录非常不准

以上问题 iPhone 都没有。现在考虑是否把主力机换回 iPhone 了。

作者: mcmug | 发布时间: 2025-12-19 02:16


41. 机考后,软考难度是升级还是降级了

个人结论:我认为是升级了。

1 、论文现象:

  • 论文押题:23 年下半年,报班论文老师押题精准。机考后,押题这种魔法失效。
  • 论文出题范围:论文主题越来越前沿,教材中任何部份都能出题。

论文结论:

  • 论文作为通过率最低科目,通过率进一步压低。

2 、案例和综合现象:

  • 刷真题失效:真题占比率降低,前沿占比率提高,需要参考人员知识背景丰富。

结论:

  • 案例和综合难度提升。

整体来看,机考后通过率降低。 以高级信息系统管理为例,论文押题魔法失效,25 年上半年论文题目考核不确定性绩效域拦住了绝大多数考生。 以高级系统架构师为例,论文题目云上运维,多模态数据库等前沿技术选题拦住了绝大多数考生;案例考核 Redis 、MongoDB 等后段技术栈,拦住了嵌入式、前端等开发人员。

作者: rebounce | 发布时间: 2025-12-20 01:59


42. 做了一个用来 vibe coding 的文档, Vibe doc

如题, 做用 vibe-doc 用来 vibe coding

https://github.com/yangyaofei/vibe-doc

主要是下面的一些功能:

  1. rules 用来规范项目编写的流程里面集成了

    • agile, 用 sprint + phrase 来分步完成任务, 明确可追溯
    • 可以增加更多的 rules 来更好的规范项目
  2. handovers 上下文清理时的锚点

  3. prefs 代码编写的规范和习惯,类似于 skill

  4. 根据自己的项目和代码, 更新自己的 prefs 和 rules(让模型帮你做, 自己指点江山就行), 让模型表现的更像自己写程序

作者: yangyaofei | 发布时间: 2025-12-22 13:21


43. 大家在实现 AI Agent 的时候都用什么框架呢?

问题 1:
最近做一个项目,需要用做一个类似医生的 AI Agent ,需要大模型根据每一步的结果决定下一步的检查,自主规划、循环思考。
病人描述自己的病情,医生自主规划检查的方案,我们会提供 MCPTools 供医生使用,这些 Tools 包括:血液检查、B 超、X 光等等。医生 Agent 会根据每一步的结果决定下一步的检查,直到找到病因,得出结论。
我们目前使用 OpenManus ,效果还行,但是感觉还有较大的优化空间,现在的框架也比较多,请教下足智多谋的 v 友,有没有更好的选择?

问题 2:
在问题 1 中,我们寄希望于病人能一次性、全面、准确地描述出自己的症状,然后医生 AI 才开始行动。
但是现实情况,往往并不是这样的,我们去看病,在前期问诊过程中,病人往往无法做到一次性、全面、准确地描述出自己的症状,医生往往需要多轮提问,才能回去足够的信息,才能开始检查。

[问诊阶段]
医生:哪里不舒服?
病人:头疼

医生:哪个部位?
病人:额头

医生:痛了好久了?
病人:前天开始痛的

医生:怎么个痛法?针刺、盾击、闷痛、跳动痛
病人:闷痛

医生:表面痛还是里面痛
病人:表面靠里一点点

医生:了解了,开个脑电图。
[问诊阶段结束]

如果我们要实现这个 AI 自主规划检查之前的循环对话问诊,有没有现成的方案?还是说需要自己手搓。

作者: chman | 发布时间: 2025-12-22 07:08


44. GLM4.7 出了 Coding 套餐也可以用

GLM-4.7 在编程、推理与智能体三个维度实现了显著突破:
编程能力:在 LMArena Code Arena 盲测中位列开源第一、国产第一,超过 GPT-5.2 ;在 SWE-bench-Verified 获得国产第一;在 LiveCodeBench V6 达到 84.8 的开源 SOTA 分数,超过 Claude Sonnet 4.5 。

推理能力:在 AIME 2025 数学竞赛中取得开源 SOTA ,超过 Claude Sonnet 4.5 和 GPT-5.1 ;在 HLE (“人类最后的考试”)基准测试中获得 42% 的成绩,较 GLM-4.6 提升 38% ,接近 GPT-5.1

智能体能力:在 BrowseComp 网页任务评测中获得 67 分;在 τ²-Bench 真实世界交互评测中实现开源 SOTA ,接近 Claude Sonnet 4.5 ( 84.7 分)

作者: nananqujava | 发布时间: 2025-12-22 15:04


45. 美东源站,网络架构、优化线路反代服务器位置选择讨论

正规业务。源站在美东弗吉尼亚 AWS ,CDN 使用 CloudFront (开启 Origin Shield )。 有一部分 CN 客户,使用 AWS Route53 的区域路由,搞一台优化线路鸡反代给 CN 区域访客;

AWS CloudFront 的Origin Shield会将请求汇聚到源站前的最后一层节点,然后进行统一请求。 CloudFront 的流量路由应该是这样: 用户 –> Edge Node –> Origin Shield Node –> 源站; image

因此,用户的流量到达 Edge Node 之后,流量应该是走 AWS 的内部网络,而不是公网。

我的思路是 CN 区域走优化线路,然后到达 AWS Edge Node ,路由是这样: CN 用户 – > 优化线路反代 –> AWS Edge Node –> Origin Shield Node –> 源站; image

我最纠结且不明白的地方,也是本帖最核心的讨论点: 首先,优化线路可选三个位置:香港、日本、美西,假设反代服务器都是三网各自优化。

方案 1 香港反代: CN 用户走优化线路到香港,尽快到达 AWS 内部网络,但是不知道 AWS 香港到 AWS 美东,这一段的路由如何;

方案 2 美西反代: CN 用户走优化线路到美西,CN 到美西这一段能够保证已知的网络质量是相对比较快且稳定的,接着到达 AWS 美西节点,再到源站。美西到美东走 AWS 内部网络,这一段肯定也是不用担心的;

方案 3 日本反代: 理论上来说,是以上两个方案的折中,但未知的也是不知道 AWS 日本到 AWS 美东这一段路由如何;

所以请教大家,基于我的设想,优化线路反代服务器,应该选择在何处? 请指教、讨论,谢谢!

另外,可以向我推荐这三个位置的各自优化线路鸡,预算不限!香港和日本我知道有 GoMaMi/Neburst ,美西我知道有 v.ps

作者: captainm | 发布时间: 2025-12-22 11:36


46. 怀疑微信有获取电话的黑产方法

我 TM 今天震惊了,朋友发给我一个莫名其妙的外部非微信小程序直播链接,我点进去了,弹出是否允许获取信息,我点了拒绝就关了,结果这个直播的团队来推销电话了,我问了问他们,他们说他们有一个外呼系统,只能看到我的尾号后四位,不能删除。

我问了问我朋友,他也是从这个链接看的直播,没下载其他 APP ,不存在其他 APP 读通讯录的情况。

我清楚地记得,我明确没有点同意按钮,直接后退了这个页面!!!

我怀疑有什么东西伪造了我同意的请求,或者 Oauth 阶段伪造我向微信端发了什么请求,让网站后台的人通过某些接口拿到了我的手机号。

我目前猜不出别的原因。大家不要点击乱七八糟的链接。这个公司和链接我不发了,我自己先拿抓包工具研究研究再说。

作者: importmeta | 发布时间: 2025-12-21 08:56


47. 我做了一些好开源软件,有啥方式能共享出去?

目标就是更多人用。不为凭此获利,(实际上也赚不了几个钱)。 但是推广苦手,有啥办法能让更多人知道自己的软件么(在不花钱的情况下)。 目前我偶尔做 b 站视频、在小红书发帖、以及在 V2EX 和小众论坛发帖。

  1. ios 软件 youlog (隐私图库/日常随手拍软件) https://apps.apple.com/cn/app/youlog/id6743986266?l=en-GB https://github.com/cornradio/youlog

  2. windows 软件 tray-chrome ( menubarx for windows ) https://github.com/cornradio/tray-chrome

  3. windows 软件 GSM (游戏存档管理和电脑掌机存档同步) https://github.com/cornradio/game-save-manager

其实还有更多,其他的都比较,,,更加小众。 我都放在自己的 appstore 里面了 https://appstore.cornradio.org/

作者: kasusa | 发布时间: 2025-12-22 02:22


48. NAS 除了存相册/影视,当下载机,还有什么妙用?刚发现还可以开 iSCSI 当 pc 的游戏盘

还有其他妙用吗?

作者: chengsitom | 发布时间: 2025-12-22 10:47


49. gocar 0.2.0 版本:新增自定义命令功能,实现真正的 go 的 cargo

上个帖子里面说我太喜欢rust cargo又苦于 golang 没有官方项目管理器,于是写了go 的 cargo,即 gocar 。原本只是满足我自己的日常使用场景,结果两三天就有 50 多个 star ,才知道很多人也有与我类似的痛点。为了满足不同人的实际使用场景,我为 gocar 添加了可选配置文件.gocar.toml功能,实现覆盖内置命令和添加自定义命令的功能:

  • 默认使用符合 Golang 最佳实践的项目结构和使用习惯,即内置命令

  • 执行gocar init将在项目下生成.gocar.toml项目配置文件,实现自定义命令和功能,配置文件中的设置优先级高于 gocar 内置命令

例如,gocar new <appName>创建项目将不会生成.gocar.toml项目配置文件,需要手动执行gocar init,通过修改这个配置文件,可以实现:

  • 覆盖 gocar 内置命令

    • 修改构建入口路径、输出目录、构建标签和配置等所有gocar的实用功能
  • 提供 commands 接口,添加自定义命令

    • 例如添加lint = "golangci-lint run"实现gocar lint获取类似cargo clippy的使用体验

更多详细使用方法,可以在 https://github.com/uselibrary/gocar 中查看文档。欢迎 issue ,尤其是实际使用中的高频命令,以便我将其添加到内置命令中来提高使用效率和表现。

以下是.gocar.toml 的部分示例:

# 自定义命令
# 格式: 命令名 = "要执行的 shell 命令"
# 使用: gocar <命令名>
# 命令会在项目根目录下执行
[commands]
# 代码检查
vet = "go vet ./..."

# 代码格式化
fmt = "go fmt ./..."

# 运行测试
test = "go test -v ./..."

# lint = "golangci-lint run"
# doc = "godoc -http=:6060"
# proto = "protoc --go_out=. --go-grpc_out=. ./proto/*.proto" 

作者: cmos | 发布时间: 2025-12-22 06:21


50. 一款独立运行、可在任何设备上插拔使用的安全 Android 设备(Android To Go)

最近看到 Notebookcheck 推了一款 TrustKernel 的 PlugMate ,出于好奇入手试用了两天,感觉这东西还挺有意思,冒个泡简单分享下。

官方对 PlugMate 的定位是: 一款拇指大小的私人电脑,可以在 iPhone 、Android 设备、Mac 和 Windows PC 上创建一个物理隔离的加密工作空间,主打安全、隐私和便携。系统是运行在它自己的硬件里,用来把加密钱包管理等敏感任务,与宿主设备上的日常应用隔离开。

实际用下来,它本质上就是: 一台拇指大小、独立运行的 Android 设备,通过 Type-C 插到 iPhone 、Android 手机或电脑上,即插即用启动一个完全隔离的 Android 系统,有点像“移动版 Android 计算棒 / Android To Go”。

我是 iPhone 用户,用它在 iPhone 上跑安卓和 iOS 双系统。买它本来打算用来存些隐私数据和小众 APP ,上手后发现这个系统可玩性比预期高不少,包括虚拟 GPS 定位、虚拟 SIM 卡、虚拟摄像头等,还自带 GMS 服务。这些能力放在“独立硬件 + 可随时换宿主设备”的前提下,组合起来挺有趣的。

不过我本人也不搞灰产,也没多少资产,目前更多是当一个干净、可控、随身插拔的 Android 环境在用,还在研究在可玩性或实际使用上还能怎么拓展。

作者: xianyu1101 | 发布时间: 2025-12-22 06:51