v2ex_hot_2026-01-28

V2EX 热门帖子

1. 发现个好玩的网站,把地图做成海报

这个网站可以把地图生成漂亮的海报,d 发朋友圈做屏保都很漂亮。用的是 openmap 的数据源,包含全世界所有城市,配 17 个模板,很多选择。我老家德州的我生成海报发到老家群里,炸了。www.printcityroad.uk 块去看看自己家乡的海报漂亮漂亮不。

作者: phenchow | 发布时间: 2026-01-27 22:35


2. 有什么推荐的浏览器?

之前浏览器是 Vivaldi,不知道从前面哪个版本开始,历史记录都丢了. 想换个浏览器了. 最好能不占用 C 盘空间.

作者: tramm | 发布时间: 2026-01-26 01:21


3. 强烈不推荐 GLM

我在 Claude Code 里用。降智得非常严重。买之前试用了一下,感觉还行。买完 Pro 之后,一周不到,现在已经开始到处说胡话了,完全不能解决问题,效果甚至不如我把代码直接复制粘贴给网页端的 GPT 。

起码 GPT 装腔作势,还是会真的帮忙解决问题的。

而且还有非常让人作呕的 AI 特有的一惊一乍。

还没买的别浪费钱了,我已经把订阅停了。

作者: namonai | 发布时间: 2026-01-27 12:52


4. 使用 claude code 几个月以后的一点想法

1 ) ai 的落地一直在业内探索,但是个人感觉这几年其实进展都不太大。无论 4o 的生图当时有多么牛 b ,真正用起来其实也就那么回事儿(我曾帮人用这玩意儿改图改了 3 个小时,还不如直接拿 ps 搞的快,别说模型问题,我把顶级主流都用遍了)。无论你们喊 ai 医疗、ai 教育,喊的多么火热, 真实落地的没下几场大雨

2 ) ai 编码大概是当前最具有确定性的场景,所以从去年下半年开始,各大厂商都在往这里面卷

3 )当前这个时间点,claude code 成了一个异类。尤其是在 opus 升级以后,claude code 的稳定可靠逐渐被大家发现和认识到了,这个趋势还在逐渐加强

4 )个人浅见,很有可能,所谓的 ai 革命只能革掉程序员们。讲真, 即便是在最擅长的写作领域,AI 就是个辅助。其他喊的很花的领域就更差了,他确实能给你一个 ppt ,但是也限于拿来玩一下而已。真要拿来搞年终汇报,还得上手自己去改,改到最后你可能觉得还不如自己去重新写一个

5 )但编码这个领域不一样了。在这个领域里面 AI 真实的改变了生产力。这个改变,在我看来是这样:以前大家都是手工艺人, 只能一点点打磨东西;现在不一样了,有机器了,现在大家必须从手艺人转变成操作机器的机车工。

6 )所以软件行业在发生一场巨变。以前是手工产出,现在改为机器产出。最终达到的是工业那样的革命,机器、汽车,无 处不在。软件成本太低了,随手可得。但是这又有一个问题,我们真的需要那么多软件么?就好像每个人都需要一辆车一样?

7 )再类比一下。很可能在汽车的生产力大幅提高以前,大家也很难想象,居然会每家都有一辆车。 所以这个事情的发展有两种可能。向左,其实大家并不需要那么多软件,于是这个事情很快就会沉寂下去。向右, 一种很科幻的可能:AI 会打开人与信息世界的全息窗口,每个人随身都在伴生无数软件。但是看起来还有点遥远。

8 )最近爆火的几个工具究其本质来看,好像是在用 coding 能力驾驭其他能力。pencil 、remotion 等。 所以这个事情好像现在变成了一场,coding 能力的全面升华。于是程序员们会觉得自己很强大。其他领域的牛马们,说不定最后都得来了解一下编码了。以后使用 claude code 处理 excel 必须是职场人标配。

作者: rayxiang19 | 发布时间: 2026-01-27 17:06


5. 💡 分享一个给 CC 的全局 Prompt 词叫:“活用 Emoji”,效果如下

💡 这些天我又新增了一个全局 Prompt 词叫:“活用 Emoji”,输出内容更直观明了,效果如下👇

大家有什么好用的全局词技巧,也欢迎分享交流 💓

作者: hzlzh | 发布时间: 2026-01-27 17:32


6. Claude Opus 4.5 还是要比 gpt 5.2 聪明一些

都是使用 GitHub copilot 帮我操控浏览器,gpt 说网页绘在 canvas 里面没法获取到 dom 读不到内容,就开始想着要截图然后搞图像识别了,然后我就换成了 opus 4.5 重跑,它识别出了这个 canvas 是 tradingview 的,然后想到去检查 TradingView 是否在 window 对象上暴露了任何可用的 API ,最后找到了,不用图像识别也能顺利解决了问题

不过 copilot 上没有 gpt 5.2 pro ,没法对比两方最强的模型

但是不得不说现在 token 的价格还是太贵了,再过两年价格打下来之后 ai 应用才会大爆发吧,就像当年 pc 、互联网、移动互联网一样,此时又要缅怀一下十年前就在喊运营商提速降费的莉卡酱了

作者: uni | 发布时间: 2026-01-27 17:21


7. 为什么 gemini3pro 这么拉胯

antigravity 的 gemini 模型,不管是 pro 还是 flash 。简直就离谱了。

calude code 也太好用了,几秒钟就能准确定位答案。gemini 一开始还行现在越来越拉胯,calude 额度现在一限制就是几天,太离谱了。

  • 无限循环
  • 海量 token 生成。也不知道在干嘛。

吐槽完毕,请问大佬们 calude code 如何购买最划算,是订阅 cursor 么,还是如何使用 calude code 性价比最好呢

作者: frank1256 | 发布时间: 2026-01-27 10:30


8. VSCode 的跨平台配置同步有 Bug

今天在 Windows 上发现 Golang 报异常, 然后看了一下发现 GOPATH GOROOT 都是配的我 Mac 上的环境路径

之前看它的快捷键配置不会起冲突还以为对跨平台配置同步这块有有优化, 没想到还是会有这样的问题

作者: hentailolicon | 发布时间: 2026-01-27 14:48


9. AI Coding 普及之后, V 站基本上不再讨论“怎么写代码”了

之前关于 go ,rust ,java 等热门语言,都有很多月经贴,周经贴。现在 AI Coding 之后,基本都没什么人讨论语言相关的东西了。

关于语言语法、编程技巧、代码风格、最佳实践的讨论,肉眼可见地少了,我在想是不是 AI Coding 彻底把“怎么写代码”这个问题给解决了?

作者: Dg3gWjbFvvq | 发布时间: 2026-01-27 08:02


10. 对于 ai coding 总是把事情弄的一团糟的一点想法

ai 能力很强,但是如果仓库的代码量越来越大,还继续纯 vibe coding ,大概率你的项目会越来越乱,越来越难以维护和管理

那么为什么人类工程师写代码不会这样?

我自己想了一下我的开发行为,大概是这样的:

  1. 接到一个需求,理解需求具体是要干什么
  2. 我的大脑自动 rag 一下,回想起这个需求相关的可复用的代码 kit ,规范是什么,以及存放在哪里,该咋用
  3. 开始 coding
  4. 再对照我记忆里的“这种需求的代码在这个项目该怎么写” 的相关规范进行 review 一下
  5. commit && push

所以为什么 ai 做不到这样?一个是 vibe coding 的人有可能本身就是纯小白零基础,自己也不知道该怎么写代码才是规范的,也有可能是被需求,排期填满的工程师,没有很多空去每次写需求都让 ai 走一遍完整流程(全走完流程的话说不定工程师自己都差不多写完代码了)

all in all ,为了解决这个问题,我们内部仿照人类工程师的开发模式打造了一套给 ai 的工作流,我们会把代码的各种结构规范和开发准则进行沉淀形成文档,把 commit 相关信息也沉淀到文档中,这样每次跟 ai 对话之前,可以用对应的流程只注入它需要的 context ,这样在实际 coding 之前,你得到的就不是一个 预训练过很多预料,coding 能力很强,但是会随机发挥 coding 能力的 agent ,而是一个熟悉你项目最近提交情况,熟悉本次需求开发相关代码该咋写的代码工程师了;

在 coding 结束之后,也会有类似的强行注入 review 相关所需上下文的流程去进行 code review ,防止 coding 过程中因为上下文太多,忘记代码规范是什么;

以及在工作完成之后,会有专门流程检查本次 coding 是否产生或者修改了对应的开发规范,如果有这种情况就会对开发规范进行修改,做到越用越好的效果

我们内部觉得这是一个非常提效的流程,最近可能开源出来, 会有人想用这种东西吗

作者: fmfsaisai | 发布时间: 2026-01-27 10:50


11. 海外个人业务租服务器怎么租比较便宜?

还是倾向大厂商之类的,几家大厂商的价格差蛮多的
大概配置是 2 核心 8G 左右,租个两三年 大家一般都是选哪家?有没有什么优惠活动之类的

作者: louistsangjk | 发布时间: 2026-01-27 03:13


12. Kiro 是不是炸了, An unexpected error occurred, please retry.

作者: Uplay | 发布时间: 2026-01-27 07:43


13. [讨论] 我还是不明白 Clawdbot 的核心价值在哪里?

在知乎和公众号上看到这个,我看很短的时间就到 20k+star 了。

咨询了一下 gemini 给了几个描述 1.交互权力的反转:从“Reactive (被动)”到“Proactive (主动)” 2.运行环境的反转:从“云端沙盒”到“本地上帝视角” 3. 入口的反转:从“专用 APP”到“IM 伴侣”

看了一下 reddit 也没太理解,就是比如我现在用 claude code 做工作,远程 ssh , 以及用 claude code 构建云端服务器的通知到我手机和 mac 的系统,以及还包含日志和知识文档, 和它有什么区别?

感觉算不算 vibe coding 的另一种演化?他的长期运行,如果是用高智能的大模型 api ,一天开销都很夸张吧。

请教一下有没有大佬实际当作生产力的工具呢?

作者: LittleTree | 发布时间: 2026-01-26 03:09


14. Google 商店里的 Qwen Chat 需要哪个地区才能下载

https://play.google.com/store/apps/details?id=ai.qwenlm.chat.android&hl=en_SG&pli=1

我打开网页端的商店 提示 This app is not available for any of your devices ,手机端是搜不到这个 app 的。

代理 ip 是新加坡的,不知道为什么没法获取这个 app ?

作者: jaleo | 发布时间: 2026-01-27 03:16


15. miglite: Go 极简高效的数据库迁移工具

miglite: 极简高效的数据库迁移工具

如果你厌倦了复杂且依赖庞大的数据库迁移工具,渴望一个轻量级、零配置且功能强大的解决方案,那么 miglite 绝对值得一试。它用最纯粹的方式解决数据库 Schema 迁移问题,让开发者回归编码本身。


✨ 项目简介

miglite 是一个用 Golang 实现的极简数据库 Schema 迁移工具 ,它秉持”做一件事并做好”的设计哲学,提供了核心迁移功能的同时,保持了极致的轻量和易用性。

🎯 核心特性

特性 描述 优势
🪶 极简依赖 基于 database/sql 接口开发,默认不添加 任何驱动依赖包 保持项目轻量,避免依赖冲突
📝 原生 SQL 使用原始 SQL 文件作为迁移方式,无特定 DSL 学习成本 直接利用现有 SQL 技能,迁移逻辑透明可控
🔒 事务保障 所有迁移操作均在事务中执行,确保数据一致性 出现问题可自动回滚,避免数据库处于不一致状态
🔧 零配置支持 支持通过环境变量直接运行,自动加载 .env 和默认配置文件 快速启动,减少配置烦恼
🗄️ 多数据库支持 支持 MySQL 、SQLite 、PostgreSQL 等主流数据库 一套工具,多个项目复用

🛠️ 快速开始

安装方式

作为命令行工具使用

# 通过 go 安装
go install github.com/gookit/miglite/cmd/miglite@latest

作为 Go 库集成

# 添加依赖
go get github.com/gookit/miglite

# 导入使用
import "github.com/gookit/miglite"

基本使用流程

miglite create my-table-up

# status
miglite status
miglite up

miglite status

💻 实战演示

1️⃣ 配置数据库连接

miglite 提供了多种配置方式 ,从零配置到完整配置文件任你选择。

🔧 配置方式一:使用 miglite.yaml 文件

创建项目根目录下创建 miglite.yaml

database:
  driver: sqlite  # 支持 mysql, postgresql, sqlite
  dsn: ./miglite.db  # 数据库连接字符串或文件路径
migrations:
  path: ./migrations  # 迁移文件存放目录

🔧 配置方式二:完全使用环境变量(零配置)

# 设置迁移文件路径
export MIGRATIONS_PATH="./migrations"

# SQLite 示例
export DATABASE_URL="sqlite://path/to/your.db"

# MySQL 示例
export DATABASE_URL="mysql://user:passwd@tcp(127.0.0.1:3306)/local_test?charset=utf8mb4&parseTime=True&loc=Local"

# PostgreSQL 示例
export DATABASE_URL="postgres://host=localhost port=5432 user=username password=password dbname=dbname sslmode=disable"

⚠️ 注意 :MySQL 连接 URL 必须带上 tcp 协议标记,如 tcp(127.0.0.1:3306)

2️⃣ 创建迁移文件

# 创建一个新的迁移文件
miglite create add-users-table

这将在 ./migrations/ 目录下创建一个格式为 YYYYMMDD-HHMMSS-{migration-name}.sql 的文件,例如:

./migrations/20251105-102325-add-users-table.sql

3️⃣ 编写迁移 SQL

迁移文件使用简单的注释标记来区分 UP(应用)和 DOWN(回滚)操作:

-- Migrate:UP
-- 在这里添加迁移 SQL (创建表、添加字段等)
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Migrate:DOWN
-- 在这里添加回滚 SQL (删除表、移除字段等)
DROP TABLE IF EXISTS users;

📋 更复杂的迁移示例(包含索引和初始数据)

-- Migrate:UP
-- 创建文章表
CREATE TABLE posts (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- 创建索引
CREATE INDEX idx_posts_user_id ON posts(user_id);
CREATE INDEX idx_posts_created_at ON posts(created_at);

-- 插入初始数据
INSERT INTO posts (title, content, user_id) VALUES 
    ('Welcome to miglite', 'This is a sample post.', 1),
    ('Getting Started', 'Learn how to use miglite effectively.', 1);

-- Migrate:DOWN
-- 回滚操作(按相反顺序执行)
DROP INDEX IF EXISTS idx_posts_created_at;
DROP INDEX IF EXISTS idx_posts_user_id;
DROP TABLE IF EXISTS posts;

4️⃣ 执行迁移

# 初始化迁移表(首次使用必须执行)
miglite init

# 应用所有待处理的迁移
miglite up

# 无需确认,立即执行所有迁移
miglite up --yes

# 回滚最近的迁移
miglite down

# 回滚多个迁移(例如回滚最近 3 个)
miglite down --number 3

# 查看迁移状态
miglite status

🧩 作为库使用集成

miglite 的强大之处在于它不仅可以作为 CLI 工具使用,还可以 无缝集成到你的 Go 项目中

[github.com/gookit/miglite](http://github.com/gookit/miglite) 不依赖任何三方数据库驱动包,使用你项目中引入的数据库驱动

package main

import (
    "github.com/gookit/miglite"
    _ "github.com/go-sql-driver/mysql" // 导入数据库驱动
    "log"
)

func main() {
    // 创建 miglite 实例 - 配置文件可以不存在,会自动读取相关 ENV 变量使用
    m := miglite.New("miglite.yaml")
    
    // 初始化迁移表
    if err := m.Init(); err != nil {
        log.Fatal(err)
    }

    // 应用迁移
    if err := m.Up(); err != nil {
        log.Fatal(err)
    }

    // 查看迁移状态
    status, err := m.Status()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Migration status: %+v", status)
}

🎨 自定义命令行工具

你还可以基于 miglite 库构建自定义的迁移命令行工具 (这是默认自带的功能),只包含你需要的数据库驱动:

package main

import (
    "github.com/gookit/miglite"
    "github.com/gookit/miglite/pkg/command"
    _ "github.com/go-sql-driver/mysql" // 只导入需要的驱动
    // _ "github.com/lib/pq"           // PostgreSQL 驱动(可选)
    // _ "modernc.org/sqlite"          // SQLite 驱动(可选)
)

var Version = "0.1.0"

func main() {
    // 创建 CLI 应用
    app := command.NewApp("my-migrator", Version, "Custom migration tool")
    
    // 运行应用
    app.Run()
}

🔥 高级特性与技巧

🧪 支持的数据库驱动选择

数据库 推荐驱动 特点
MySQL [github.com/go-sql-driver/mysql](http://github.com/go-sql-driver/mysql) 纯 Go 实现,广泛使用
PostgreSQL [github.com/lib/pq](http://github.com/lib/pq)[github.com/jackc/pgx/v5](http://github.com/jackc/pgx/v5) pgx 性能更好,lib/pq 更兼容
SQLite [modernc.org/sqlite](http://modernc.org/sqlite) CGO-free ,跨平台友好
MSSQL [github.com/microsoft/go-mssqldb](http://github.com/microsoft/go-mssqldb) 官方驱动,功能完整

💡 提示 :作为库使用时,你需要自己导入所需的数据库驱动

🔧 环境变量自动加载

miglite 会自动尝试加载项目目录下的 .env 文件,支持以下环境变量:

# 数据库连接 URL
DATABASE_URL="sqlite://./myapp.db"

# 迁移文件目录
MIGRATIONS_PATH="./db/migrations"

# 其他配置...

📊 迁移状态查看

使用 miglite status 命令可以查看详细的迁移状态,包括:

$ miglite status

Migration Status:
================
+----------------+---------+---------------------+
| Migration      | Status  | Applied At          |
+----------------+---------+---------------------+
| 20251105-102325 | UP      | 2025-11-05 10:25:30 |
| 20251106-091500 | UP      | 2025-11-06 09:20:15 |
| 20251107-143000 | DOWN    | 2025-11-07 14:35:00 |
+----------------+---------+---------------------+

🌟 为什么选择 miglite ?

与其他迁移工具相比,miglite 提供了独特的价值:

特性 miglite golang-migrate goose dbmate
依赖复杂度 极简 中等 中等 简单
配置方式 零配置/文件配置 文件配置 文件配置 环境变量
迁移方式 原生 SQL 多种支持 原生 SQL/Go 原生 SQL
事务支持 ✅ 是 ✅ 是 ✅ 是 ✅ 是
学习曲线 平缓 陡峭 平缓 平缓
库集成 ✅ 优秀 ✅ 优秀 ✅ 一般 ❌ 否

💡 核心优势 :miglite 在保持功能完整的同时 ,实现了极致的简洁性和易用性 ,非常适合追求开发效率和代码质量的团队。

🎓 使用场景

  1. 个人项目 :快速搭建项目原型,无需学习复杂配置
  2. 团队项目 :统一迁移规范,通过原生 SQL 保持迁移逻辑透明
  3. CI/CD 集成 :零配置特性使其极易集成到自动化流程中

🤝 贡献与反馈

miglite 是一个开源项目,我们欢迎任何形式的贡献:

  • 🐛 报告 Bug
  • 💡 提出新特性建议
  • 📝 改进文档
  • 🔧 提交代码修复

请访问 GitHub 项目主页 获取更多信息或参与贡献。

作者: jxia | 发布时间: 2026-01-27 11:52


16. 告别“盘古之白”: CSS text-autospace 与中文排版的圣杯时刻

分享一下前些天写的一篇文章《告别“盘古之白”:CSS text-autospace 与中文排版的圣杯时刻》。内容就不 copy 到这里了。

结论:如果你是中文网站或内容的 Web 开发者,建议添加一行 CSS text-autospace: normal; 可以改进用户的阅读体验。

作者: hanguokai | 发布时间: 2026-01-27 07:46


17. 耗时 3 个月撸了一个专注于“自然度”的 AI 改写工具: AI Natural Write

最近上线了一个针对 AI 文本去人性化/去 AI 味的改写工具:AI Natural Write

做这个工具的初衷: 起初是因为朋友吐槽,现在很多改写工具不能过检测,而且改出来的句子读起来不像人话,逻辑很生硬。 既然市面上的工具要么过不了检测,要么改写质量堪忧,我决定自己动手。经过 3 个月的调试和算法优化,终于上线了这个版本。

主要特点:

主打自然流畅:不仅是为了过检测,更重要的是让文章读起来像真人写的。

无需繁琐注册:打开网页就能用,主打一个方便快捷。

针对性优化:经过测试,对 GPTZero 和 Turnitin 的检测有不错的绕过率。

目前产品还在早期阶段,欢迎大家试用并狠狠提意见!感谢支持!

作者: w168192930 | 发布时间: 2026-01-27 07:08


18. 没有 mac 电脑要如何开发 ios 程序呢?

有个项目的 ios 客户端需要改一下功能,但是我这没有买 mac 电脑,有没有什么办法在 windows 上开发呢?或者有没有什么地方可以租一个 mac 电脑暂时开发一下呢?

谢谢大家

作者: gegeligegeligo | 发布时间: 2026-01-27 06:57


19. 分享一下你平时使用 AI 工具的最佳实践?

比如: 1.用 cursor/cc/trae/copilot/trae 等用到的插件 2.结合 AI 给自己提效/摸鱼的工具推荐或流程自动化,想知道像浏览器自动化或办公自动化,现在到了什么程度 3.任何其他你想分享的

作者: hotea | 发布时间: 2026-01-27 03:38


20. Claude 有什么优雅的使用方法吗?

  • 一开始使用 claude 就像平时口头叙述给实习生一样直接把需求给到他进行实现,从一开始的惊讶它的智能到现在感觉并没有想象中那么厉害,很多需求都会理解错误。通常我都是会需求拆解丢给它,列举个 123 点让他逐个实现,但总感觉差点意思。让我怀疑是否我的使用方法出错了?又或者有什么比较好的使用方法呢?

作者: sikuu2al | 发布时间: 2026-01-27 06:15


21. codebuddy 新年礼物送服务器

腾讯 codebuddy 现在可以免费领取 2c2g 云服务器 1 个月,七天活跃还能再免费续两个月 还有 cloudbase 体验 6 个月 活动地址:点击进入活动地址

作者: Dreamerwwr | 发布时间: 2026-01-27 06:35


22. 2026 年,求一个安卓虚拟定位的方案,非虚拟机的那种

如题,手机是小米 14 ,已经解 BL 并 Root ,试了多种方案,都只能完成对部分软件的虚拟定位的修改,但是像微信小程序这种,始终无解。

作者: turing518 | 发布时间: 2026-01-27 01:35


23. 大家有什么推荐的 MCP 吗 比如数据库和 github 库的

作者: azev | 发布时间: 2026-01-27 01:55


24. 大伙在没有 ai 的时候都是怎么分析开源项目的源代码

现在有了 ai 我遇到不懂的方法直接让 ai 分析输入输出和调用关系直接就出来了 例如:opencode 的源代码

用户发送消息
      ↓
┌─────────────────────────────────────────────────────────────┐
│  Server (routes/session.ts:733)                             │
│  SessionPrompt.prompt({ ...body, sessionID })               │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionPrompt.prompt (prompt.ts:151)                       │
│  1. 创建用户消息                                             │
│  2. 调用 loop(sessionID)                                    │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionPrompt.loop (prompt.ts:258)                         │
│  while (true) {                                             │
│    1. 获取 Agent 配置: Agent.get(lastUser.agent)            │
│    2. 解析工具: resolveTools({ agent, session, ... })       │
│    3. 创建处理器: SessionProcessor.create(...)              │
│    4. 调用处理器: processor.process({ user, agent, ... })   │
│  }                                                          │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionProcessor.process (processor.ts:45)                 │
│  while (true) {                                             │
│    1. 调用 LLM: LLM.stream(streamInput)                     │
│    2. 处理流式响应:                                          │
│       - reasoning-delta → 更新推理部分                       │
│       - text-delta → 更新文本部分                            │
│       - tool-call → 执行工具                                 │
│    3. 工具执行完成后继续循环                                  │
│  }                                                          │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  LLM.stream (llm.ts)                                        │
│  1. 构建系统提示词                                           │
│  2. 调用 AI SDK: streamText({ model, messages, tools })     │
│  3. 返回流式响应                                             │
└─────────────────────────────────────────────────────────────┘

TUI ↔ Server 通信机制

架构图

┌─────────────────────────────────────────────────────────────┐
│  主线程 (thread.ts)                                         │
│  - 运行 TUI 界面                                            │
│  - 创建 RPC 客户端                                          │
└─────────────────────┬───────────────────────────────────────┘
                      │ RPC 通信
                      ▼
┌─────────────────────────────────────────────────────────────┐
│  Worker 线程 (worker.ts)                                    │
│  - 运行 Server.App()                                        │
│  - 处理 fetch 请求                                          │
│  - 转发事件                                                 │
└─────────────────────────────────────────────────────────────┘

Worker 启动流程

用户运行 `opencode`
         ↓
index.ts 解析命令 → TuiThreadCommand ($0 默认命令)
         ↓
thread.ts handler 执行:
         ↓
第 79-85 行:确定 worker 文件路径
         ↓
第 93 行:创建 Worker 线程
   const worker = new Worker(workerPath, { env: ... })
         ↓
第 101 行:创建 RPC 客户端与 Worker 通信
   const client = Rpc.client<typeof rpc>(worker)
         ↓
第 143 行:启动 TUI 界面
   const tuiPromise = tui({ url, fetch: customFetch, ... })

之前没有 ai 的时候经常一个方法看半天看不懂

作者: Suger828 | 发布时间: 2026-01-26 13:34


25. 针对自己的消息推送………..

原来使用 qq 邮箱+微信的 QQ 邮箱提醒通知,给自己发邮件微信会有通知.

后来改成 server 酱 我以为是免费的 后来才发现要会员.

最后切换到飞书和钉钉,创建一个群聊 开通机器人 群聊就自己,利用 webhook 进行通知.钉钉和微信应该一样的保活 目前没漏消息…

试过企业微信 QQ, 都要备案消息主动推送的主体,放弃….

作者: lmmir | 发布时间: 2026-01-26 05:36


26. 寻找一个可以有状态运行 wasm(wasi)的 faas 平台,支持私有化部署

各位大佬,最近小弟想寻找一个支持 wasm 的 faas 平台

  • 支持私有化部署
  • 支持状态持久化
  • 支持缩容到 0
  • 支持事件驱动(kafka)

作者: tanxnative | 发布时间: 2026-01-27 01:49


27. [开心一下] AI 笑话

最近糟心新闻有点多, 还是来看看 AI 笑话放松一下吧(以下均为使用 Antigravity 过程中模型生成的内容):

  1. 货不对板

货不对板

  1. 着急下班

着急下班

  1. 人为疏忽

人为疏忽

  1. 完全忘记

完全忘记

  1. 头昏眼花

头昏眼花

  1. 绝对吊打

绝对吊打

  1. 恰到好处的 emoji

非常极其准确

作者: cellsyx | 发布时间: 2026-01-26 07:42


28. 每秒万级 Tick 震荡:高频行情分发,该选 Golang 的并发原生还是 Rust 的极致性能?

说实话,作为部门经理,我已经很久没正儿八经手写过成片的代码了。平时更多是在审文档、对需求、开没完没了的会。最近项目重构,正好捡起现在流行的 Vibe Coding 来干点活,顺便测试一下 AI 在高性能场景下的逻辑可靠性,感觉像是找回了当年熬夜撸代码的快感。

但在重构报价中台时,我卡在了一个老问题上:面对外汇、贵金属这种极高频率的实时行情,我是该守着我熟悉的 Golang ,还是去卷一把我完全没碰过的 Rust ?

一、经理的纠结:性能还是效率? 在处理实时行情时,每一毫秒的延迟都可能导致报价失效。Golang 的并发模型( Goroutine + Channel )是我们团队的看家本领,处理起来得心应手。但我心里一直有个疙瘩:在高频冲击下,Go 的 GC 带来的那种不可预知的抖动,真的能通过 sync.Pool 这种对象复用的方式彻底抹平吗?

而 Rust 这两年在金融基建领域被吹上天了,号称零成本抽象,没 GC 。理论上它能让延迟曲线平滑得像条直线。可现实是,我对 Rust 完全不清楚。即便有 AI 辅助,面对那些复杂的所有权、跨线程生命周期,我这“老手”也怕翻车。

我就在想:在高频场景下,Go 的原生高性能是否已经足够撑起这片天?还是说,Rust 才是唯一的终局?

二、实战:Golang 高频处理架构实现 为了测试 Go 的极限,我写了一套基于 sync.Pool 对象复用和非阻塞分发的逻辑。这套架构的核心思路很简单:尽可能少地申请内存,尽可能快地把数据甩给下游,不让 GC 增加我的负担。

package main

import (
    "encoding/json"
    "log"
    "net/url"
    "sync"

    "github.com/gorilla/websocket"
)

// TickData 行情结构
type TickData struct {
    Symbol    string `json:"symbol"`     // 交易对,如 XAUUSD
    AskPrice  string `json:"ask_price"`  // 卖出价
    BidPrice  string `json:"bid_price"`  // 买入价
    LastPrice string `json:"last_price"` // 最新价
    Timestamp int64  `json:"timestamp"`  // 时间戳
}

var (
    // 通过对象池复用,规避高频 Tick 下频繁 new 对象的 GC 压力
    tickPool = sync.Pool{
        New: func() interface{} { return new(TickData) },
    }
)

func main() {
    // 实时订阅:涉及高频外汇、贵金属行情接口
    u := url.URL{
        Scheme:   "wss", 
        Host:     "api.tickdb.ai", 
        Path:     "/v1/realtime", 
        RawQuery: "api_key=YOUR_API_KEY", // 实际使用时替换为真实 key
    }
    
    log.Printf("正在连接到行情源: %s", u.String())

    conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
    if err != nil {
        log.Fatal("连接失败:", err)
    }
    defer conn.Close()

    // 扇出通道:缓冲区大小直接影响背压处理
    broadcast := make(chan *TickData, 4096)

    // 消费者:负责处理复杂的下游业务分发
    go func() {
        for tick := range broadcast {
            // 这里接入实际业务逻辑,如内存撮合、流计算或日志记录
            // process(tick)
            
            // 关键:在确保数据处理完毕后归还对象池
            tickPool.Put(tick)
        }
    }()

    // 生产者:监听实时 WS 流
    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("读取错误:", err)
            break
        }

        // 从池子里捞一个对象出来
        tick := tickPool.Get().(*TickData)

        if err := json.Unmarshal(message, tick); err != nil {
            // 解析失败也要记得还回去,防止对象池枯竭
            tickPool.Put(tick)
            continue
        }

        // 非阻塞分发:行情系统的核心准则——“宁丢勿晚”
        select {
        case broadcast <- tick:
            // 发送成功,由消费者负责逻辑处理完后 Put 回池子
        default:
            // 缓冲区满了直接丢掉,避免阻塞主循环读取,保证行情时效性
            tickPool.Put(tick)
        }
    }
}

三、求带路:既玩 Go 也玩 Rust 的兄弟请进 这篇文章我最想请教的是那些双修大佬。你们在真实的高频生产环境下,是怎么看的:

分发成本:在 Go 里我用 Channel 发指针接 sync.Pool 玩得飞起。但在 Rust 里,如果我要把同一份 Tick 数据分发给多个订阅者,是满场飞 Arc 性能更好,还是通过 Crossbeam 这种无锁队列硬刚?

Vibe Coding 的局限:我发现 AI 生成的 Go 代码在处理并发时逻辑很稳。但生成的 Rust 代码,一旦涉及到多线程修改共享状态,各种生命周期标记和 RefCell 能看得人脑仁疼。对于完全没碰过 Rust 的人,这个门槛值得跨吗?

真实体感:你们有没有过把 Go 写的行情分发重改成 Rust 的经历?吞吐量和延迟分布( P99 )真的有质的飞跃吗?还是说,其实瓶颈往往在网络 I/O 而不是语言本身?

我是该继续坚守我的 Golang“避风港”,还是该听你们的,直接一步到位上 Rust ?欢迎评论区拍砖,求带路,求毒打。

作者: chenfengrugao | 发布时间: 2026-01-26 12:39


29. 使用 Google 的 Antigravity 需要开启 tun 模式,否则无法正常登录和拉取模型,开启了 tun 模式后又会导致内网环境无法正常使用? 大家是如何解决的?

这个不适用 yu 于 tun 模式啊

作者: Liamccc | 发布时间: 2026-01-26 07:42


30. 各个语言 podman 打包对比 PHP golang rust

最近在重构 php 网站,在不断的测试其他语言,一些结论,仅供参考。

hello world 速度上
laravel octane+frakenphp 200ms
flightphp 20ms
golang 2ms
rust 没测试

打包文件大小上 prod
Laravel 大约 600M ,具体不记得了,删掉了
python litestar 313 MB
golang 11.8 MB

我以为 golang 是王者了,结果,刚刚测试 rust 4.87 MB

打包文件 dev 模式
golang 1.1G
rust 1.7G

内存占用上 ( podman stats )
golang 2.806MB
rust 524.3kB

CPU time
go 268.388ms
rust 34.221ms

不得不说,podman 部署是真方便,用 AI 写好脚本,zero downtime 一键部署到 N 个机器

本地开发也方便,线上打包好开发环境,直接下载,然后 dev start 就行

rust hello world 刚刚上线,感觉不错,稍微不好的地方是 本地 podman hotreload 有点慢,改了代码要等 2s ,go 不用等

作者: Loser110 | 发布时间: 2026-01-27 13:17


31. 程序员的自我修养:如何用好 GDB

https://jt26wzz.com/posts/0014-the-dwarf-behind-the-debugger/

写了一篇新的技术博客,篇幅有点长,而且受限于个人水平,有些地方表达的不是很好,或者说有点详略不得当,不过还是把我目前对调试器的基本认知都写出来。

这里特意发个帖子,想和对这块感兴趣的人一起讨论讨论,特别是我有哪里理解不到位或者错误的地方,欢迎直接指出,毕竟我写博客的目的也是为了交流和自我提升。虽然我也可以让 AI 来 review 我的博客内容,但是我还是更倾向于和大家交流。

作者: swananan | 发布时间: 2026-01-26 05:30


32. 如果说“语言的边界就是思想的边界”,那么与 AI 对话是否有必要用英文?

模型训练数据中中文内容少,使用英文或加一句“把我说的内容翻译成英文再思考然后回答我”是否有意义?

作者: raw0xff | 发布时间: 2026-01-25 13:53


33. 发现一个自动优化 js/ts 桶文件的工具

https://github.com/webpro/unbarrelify

这个工具可以自动删除桶文件并更新正确路径,里面的文章也值得一读。 不过试用了一下在 windows 上路径处理有问题。

桶文件是 js/ts 社区大范围错误使用的一种重新导出写法。

你会发现很多开源项目都会大量使用 index.ts 然后重新导出子模块

export * from './xx'

这是错误的做法,但使用人太多了,大家都会以为大家都在用那么我也应该这样用,最后像病毒一样传染了整个生态。

如果你的项目作为一个库发行,那么有使用桶文件的正当理由,但其他场景下应该尽量避免。

这种写法的优点是可以在一行里 import 多个函数/类型,当然它实际上不是”优点”,缺点是 ESM 打包优化困难、启动慢、热更新慢、CI 慢,调用不清晰,潜在的循环依赖。 人们以为随着工具链迭代这些缺陷都会慢慢消失,但遗憾的是,理论上不存在真正的解决办法,能够做的就是不断加缓存,但收效甚微。

你使用重新导出写法去引用一个十万行模块里面的十行左右函数,打包器、开发服务器必须遍历完十万行代码才能分析好依赖关系把这十行函数打包进去。

如果用代码说话,你不应该使用这样的写法

import { a, type B } from '@/x'

而是删掉你的 index.ts ,换成

import { a } from '@/x/a'
import type B from '@/x/b'

第一天这么使用,你可能会觉得难以接受,但是忍耐几天后,你大概会接受这种写法,并且感受到在一个大型屎山项目中启动速度、打包速度、CI 检查速度的飞跃提升。如果你的项目桶文件足够多,这个提升很可能是几十倍。 当然工具链、CI 的速度只是其中一部分原因,更重要的是它消除了不必要的隐性封装,如果你直接依赖 x/a ,你就应该只 import x/a ,而非整个 x 。

在发现这个工具之前,我一直使用 eslint 插件来避免创建任何桶文件,因此我用不上这个工具,但应该有不少人需要它,希望有一天能彻底终结 barrel-files 问题。

作者: Ketteiron | 发布时间: 2026-01-26 10:13


34. 国内 Android 现在有什么非厂商推送就可以达到定时提醒的方案吗?

有什么方案可以达到定时推送?就是例如喝水提醒 APP 的需求。

可以推送,可以提醒,不依赖系统日历和闹钟,排除桌面控件,悬浮窗,任务栏,无声媒体。同时最好不监听广播。

作者: 96 | 发布时间: 2026-01-26 05:51


35. 同样的配置 Win11 Pro 比 Win10 LTSC 更流畅?

RT ,因为一些需求,一直有一台 Windows 虚拟机用来处理特定于 Win 环境的事情。

之前一直都是用 Windows 10 LTSC ,配合 2C4G ~ 4C8G 的资源。

近期尝试用了一下 Win11 ,发现日常用起来 Win11 Pro 居然还挺丝滑?没有我想象中的这么卡顿,把自动更新关了,目前看似乎用起来也不错。

我之前一直以为 Win10 LTSC 这样的精简版 Win10 怎么都比 Win11 要流畅,现在看来颠覆了一些我的认知,准备用一段时间看看。

作者: songtianlun | 发布时间: 2026-01-26 06:43


36. antigravity 的 claude 总是断 Agent execution terminated due to error.

rt ,有大佬知道是怎么回事,网上说什么 禁用 mcp ,还有 reset boarding 都试过了,节点应该还是比较干净的,还是老出现这个问题,用自家的 gemini 就没问题。

作者: frank1256 | 发布时间: 2026-01-26 09:55


37. 关于 Claude Code 速度的问题

目前用下来,Claude Code 不管是用原生的模型还是国内 glm ,minimax ,整体响应速度都很慢。

而 windsurf 、copilot 这些,速度明显快很多,基本跟 chat 的速度类似,哪怕选 Sonnet 速度也要比 cc 快。

这是什么原因呢?

作者: Kontinue | 发布时间: 2026-01-27 09:06


38. 个人如何使用电话的语音通知功能?

只是觉得好玩,并且这样的提醒很有效。
当前打算用扣扣云的语音消息,一千分钟 110 元,两年有效期。

群友有其他方案推荐的吗?

作者: webs | 发布时间: 2026-01-26 14:07


39. 电影院购票小程序需要哪些资质

朋友的影院有合作的小程序,合作有几年了,但是抽佣有点高。想自己找人开发一套,包含小程序和后端,想了解一下上线影院购票小程序需要哪些资质,三级等保是必须的吗?

作者: tsuih | 发布时间: 2026-01-26 09:13


40. 拥抱 PostgreSQL 支持 UI 配置化

前言

前阵子写的日志分析工具NginxPulse,自开源以来,已过去 2 周时间,目前 GitHub 已收获 1.5k 的 star 。收到了不少用户的反馈建议,花了点时间将这些问题都处理了下。

本文就跟大家分享下新版本都解决了哪些问题,优化了哪些内容,欢迎各位感兴趣的开发者阅读本文。

抛弃 SQLite

有不少用户反馈说日志文件很大的时候( 10G+),解析速度非常慢,需要解析好几个小时,解析完成之后数据看板的查询也比较慢(接口响应在 5 秒左右)。

于是,我重写了日志解析策略(解析阶段不做 IP 归属地查询,仅入库其他数据,将日志中 IP 记录起来),日志解析完毕后,将记录的 IP 做去重处理,随后去做归属地的查询处理(优先本地的 ip2region 库,远程的 API 调用查询做兜底),最后将解析到的归属地回填至对应的数据库表中,这样一套下来就可以大大提升日志的解析速度。

数据库的数据量大了之后,SQLite 的表现就有点差强人意了,请教了一些后端朋友,他们给了我一些方案,结合我自身的实际场景后,最后选定了 PostgreSQL 作为新的数据库选型。

这套方案落地后,用户群的好兄弟说:他原先需要解析 1 个小时的日志,新版只需要 10 多分钟。

6c1c8781ddb810d57c9f508fdaf47025

UI 配置可视化使用

有一部分用户反馈说他非专业人士,这些晦涩的配置对他来说使用门槛太高了,希望能有一个 UI 配置页面,他只需要点一点、敲敲键盘,就能完成这些配置。

我将整个配置流程做成了 4 步,同时也准备一个[演示视频](NginxPulse 支持 UI 配置化了) - https://www.bilibili.com/video/BV1hqzyBVEU9:

  • 配置站点
  • 配置数据库
  • 配置运行参数
  • 确认最终配置

image-20260125235847464

新增 wiki 文档

因为配置过于庞大,仓库主页浏览 README.md 比较费劲,希望能整理一份 wiki 文档发上去。

花了点时间,简化了下 README ,整理了一份: https://github.com/likaia/nginxpulse/wiki

image-20260126000555725

访问明细模块优化

有部分用户反馈说希望增加更多的筛选条件以及导出 Excel 功能,现在它来了:

image-20260126001010068

概况模块优化

概况页面的日期筛选之前放在趋势分析卡片的上方,但是他的切换影响的维度还包含了指标,于是我就调整了下它的位置,新版如下图所示:

image-20260126001325265

项目地址

写在最后

至此,文章就分享完毕了。

我是神奇的程序员 ,一位前端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

作者: MagicCoder | 发布时间: 2026-01-26 01:56


41. AI AGENT 技术选型

由于团队内部后端主要使用 golang ,前端使用的是 react

有经验的大佬看看这个方案如何?或者有没有更合适的方案?

后端 https://github.com/cloudwego/eino

前端 https://github.com/ag-ui-protocol/ag-ui

作者: cydleadingx | 发布时间: 2026-01-26 09:41


42. Typo 修正终端的拼写错误(想了想,还是决定发一下 👀

Github 地址: https://github.com/deigmata-paideias/typo

和 thefuck 类似,但是目标是比 thefuck 更智能和好用一些(目前还在 dev 阶段。

解决 thefuck 库的几个问题:

  • 不继续维护了,Python 3.12+ 安装报错;
  • 不支持自定义的 alias 配置;
  • 多级命令时引号会丢失: https://github.com/nvbn/thefuck/issues/1543
  • 依赖 python 的运行库,低版本会出现运行失败问题;
  • thefuck 有时候可能返回错误的修复命令,没有候选。

实现方式

实现方式挺简单的:扫描系统的 man 指令然后保存到 sqlite ,对比 thefuck 用的是文件配置; 同时扫描 alias 指令,也保存到数据库;因此在执行的时候需要先扫描命令,也可以对数据库做修改,只保留常用的就行,提高匹配准确度。

然后获取 history 文件的最新一行,截取对比,按相似度排序。最后输出选择执行。

LLM 集成用的是 openai 的 go sdk 。但是对比 local (数据库方式)会慢一点。

效果预览

使用了 oh-my-zsh 框架插件集成,两次 esc 就可以修复了。

AB5E9F0B-9BED-4E30-A3A7-57BD35E05C4E

差不多就是这个样子。

其他功能

目前只扫描了 man 的 1 和 8 指令集,基于相似度匹配,还可以模糊搜索( fzf 会更好用些)

遇到的问题

git 和 gti 的相似度只有 33.3 % ?

我可能不是喜欢 coding ,而是 building 🤣

作者: karashoukpan | 发布时间: 2026-01-27 13:22


43. antigravity 用 gemini-pro 大家能稳定输出中文吗

如果可以, 提供下 rule 之类的阿,或者其他方式, 提示词啥的

我用的网上到处传的
https://juejin.cn/post/7575442779038351402

但实际用下来, 只有 claude opus 能稳定输出中文

gemini-pro 有时中文有时英文, 随机的, 没法控制

现在谷歌收紧 opus 额度了, 很快用完了, 只能用 gemini-pro 了阿

作者: iorilu | 发布时间: 2026-01-26 08:15


44. 大家在用 opencode 还是 claudecode?哪个更舒服

我两个都用过,最近写了一篇关于 opencode 得使用教程,opencode 可以分享会话这点觉得挺好的。 https://mp.weixin.qq.com/s/7OgvgLTdTxU7cIEGVm8dVw ,到说实话感觉 claudecode 还是更舒服点,你们觉得呢?下面这个是早上用 cc 写的浏览器自动化文章,大家可以关注一波 https://mp.weixin.qq.com/s/mit1l6bJBZVLQSQMRkeqcw

作者: squirrel7105 | 发布时间: 2026-01-25 09:58


45. PHP 网站重构, Rust/ Python + PostgreSQL + astro+solid,大家觉得怎么样子

如题,传统 php 网站,mysql 数据库,一些 crud 等,pdf 、excel 等处理

准备重构:
后端 Rust+python 微服务处理 pdf 、excel 等
前端 astro+solid
数据库 PostgreSQL

部署 Podman

大家觉得如何,有没有更优化的组合。

前几天我还在用 Go ,但是,因为感觉很多人倾向于 Rust 替代 Go ,所有把 Go 替换成 Rust 在试一试

作者: Loser110 | 发布时间: 2026-01-27 04:16


46. 大家的 Antigravity 家庭共享还能用吗?

今早发现进家庭组的小号变成免费账户了,7 天才刷新额度。

https://one.google.com/ai 里看到还是在家庭组的

这是不给白嫖额度了吗 :(

作者: imik | 发布时间: 2026-01-26 02:29


47. 用 Claude 操作 Blender 3D 建模

https://github.com/ahujasid/blender-mcp

作者: Livid | 发布时间: 2026-01-26 10:45


48. Opus 4.5 帮我更新了这个页面顶部的动画背景

https://www.v2ex.com/solana/about

作者: Livid | 发布时间: 2026-01-26 08:56


49. 实在没有 get 到 Clawdbot 的应用场景,这不噱头吗

不就是家里放一台电脑开着 cusor/antigravity ,然后我拿 teamviewer 远程一下?什么跑在本地,这不扯淡吗

作者: actopas | 发布时间: 2026-01-26 02:12


50. VSCode 的 Live Preview 扩展插件问题

VSCode 的 Live Preview 扩展插件的 Inspector Mode 如何打开 我是 MacBook 版本,我在使用当中在他的预览处点击的某一个地方就能够跳到那一段代码,是否可以实现这个功能?网上查 AI 说是有,但是根据他们的操作根本就是找不到的,或者他们只是在胡说八道,有没有这样的插件可以实现这功能,谢谢。

作者: ww2100 | 发布时间: 2026-01-26 10:38