标签 VS Code 下的文章

这个是一个 VsCode 插件,使用上很友好,原理是使用 Claude 里面的便宜模型 Haiku 或者 Gemini 3 Flash 阅读,然后使用高参数模型(比如:Claude Sonnet 4.5 和 Gemini 3 Pro) 写代码:

实测,可以比 Claude 省钱 95%,编码效果完全一样

使用方式:

1 ,下载 VS Code (如果没有你就去百度一下)


2 ,安装

搜索:Claude Code Cheaper

3 ,使用


里面有赠送额度!实测折合比直接使用 Claude Code 便宜 95% !

代码调试是开发者日常工作中高频且核心的环节,很多开发者花费数小时甚至通宵排查一个简单 Bug,核心问题并非技术不足,而是陷入了「调试思路混乱、工具使用不当、日志记录不全」的坑。这份手册结合前后端通用调试场景,从日志分析、断点调试、常见坑点规避三个维度,拆解调试的核心逻辑与实操技巧,附具体代码示例与工具配置,帮你快速定位 90% 的开发 Bug,告别无效调试。

一、日志分析:打好调试基础,让 Bug 有迹可循

日志是调试的「第一手证据」,但多数开发者仅用 console.log/System.out.println 简单输出,导致日志信息残缺,无法定位问题。高质量的日志记录,能让 60% 的 Bug 在无需断点的情况下快速解决。

1. 日志记录核心原则:5 要素缺一不可

有效的日志需包含「时间戳、模块 / 文件、级别、上下文、具体信息」,避免无意义的日志输出。
前端示例(JavaScript/TypeScript):

// 错误示范:仅输出值,无上下文
console.log(userInfo); 

// 正确示范:封装日志函数,包含核心要素
function log(level, module, message, context = {}) {
  const timestamp = new Date().toISOString();
  console.log(`[${timestamp}] [${level}] [${module}]: ${message}`, context);
}

// 实际使用:定位用户信息获取异常
try {
  const userInfo = await getUserInfo(userId);
  log('INFO', 'user-api', '用户信息获取成功', { userId, userInfo: userInfo.id });
} catch (error) {
  // 错误日志包含错误栈、请求参数,便于定位
  log('ERROR', 'user-api', '用户信息获取失败', { userId, error: error.message, stack: error.stack });
}

后端示例(Python):

import logging
import time

# 配置日志格式:包含时间、模块、级别、信息
logging.basicConfig(
    format='[%(asctime)s] [%(levelname)s] [%(module)s]: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

# 实际使用:定位数据查询异常
def get_user_data(user_id):
    try:
        logger.info(f"开始查询用户数据", extra={"user_id": user_id})
        # 模拟数据库查询
        user_data = db.query("SELECT * FROM users WHERE id = %s", user_id)
        logger.info(f"用户数据查询完成", extra={"user_id": user_id, "data_count": len(user_data)})
        return user_data
    except Exception as e:
        # 错误日志包含异常信息和上下文
        logger.error(f"用户数据查询失败", extra={"user_id": user_id, "error": str(e)})
        raise

2. 日志级别合理使用,避免日志泛滥

级别使用场景示例
DEBUG开发调试,输出详细流程 / 变量接口请求参数、函数内部变量
INFO正常业务流程记录接口调用成功、任务执行完成
WARNING非致命异常,需关注但不影响运行配置缺失、数据格式不规范
ERROR致命异常,功能无法正常执行接口调用失败、数据库查询异常
CRITICAL系统级异常,影响整体运行数据库连接失败、服务端口被占用

3. 避坑点:日志不要泄露敏感信息

调试时容易将用户密码、Token、手机号等敏感信息写入日志,需在日志输出前过滤:

// 过滤敏感信息函数
function filterSensitiveData(data) {
  const sensitiveKeys = ['password', 'token', 'phone', 'idCard'];
  const result = { ...data };
  sensitiveKeys.forEach(key => {
    if (result[key]) result[key] = '***';
  });
  return result;
}

// 使用:输出用户信息时过滤敏感字段
log('INFO', 'user-login', '用户登录成功', filterSensitiveData(userInfo));

二、断点调试:精准定位问题,替代无脑打印日志

断点调试是解决复杂 Bug 的核心手段,比反复加 console.log 高效 10 倍,前端 / 后端均有成熟的调试工具,关键是掌握「断点设置技巧」和「调试流程」。

1. 前端断点调试(VS Code + Chrome)

核心步骤:
配置 launch.json(VS Code 中):

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "调试前端项目",
      "url": "http://localhost:3000", // 项目启动地址
      "webRoot": "${workspaceFolder}/src",
      "sourceMaps": true // 开启源码映射,便于调试TS/打包后的代码
    }
  ]
}

点设置技巧:
条件断点:右键断点 → 设置条件(如 userId === 10086),仅当条件满足时触发,避免无关断点干扰;
日志断点:不暂停程序,仅输出日志(替代 console.log),适合调试生产环境 / 高频执行的代码;
命中次数断点:设置断点触发的次数(如第 5 次执行时暂停),定位循环中的偶发 Bug。

调试面板核心操作:
步进(Step Over):执行下一行代码,不进入函数;
步入(Step Into):进入当前行调用的函数内部;
步出(Step Out):从当前函数跳出,回到调用处;
监视(Watch):添加变量 / 表达式,实时查看值的变化(如 userInfo.name、list.length > 0)。

避坑点:
调试打包后的前端代码时,需确保开启 sourceMap,否则断点会定位到压缩后的代码,无法调试;
避免在 setTimeout/Promise 等异步代码中盲目断点,需在异步回调内设置断点,或使用「异步堆栈跟踪」(Chrome DevTools → Settings → Experiments → Async stack traces)。

2. 后端断点调试(以 Java + IDEA / Python + VS Code 为例)

Java(IDEA):
启动调试模式:点击运行按钮旁的「调试」按钮,或右键代码 → Debug;
关键技巧:
远程调试:配置 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 启动参数,本地 IDEA 连接远程端口,调试线上 / 测试环境 Bug;
异常断点:Run → View Breakpoints → + → Java Exception Breakpoints,选择具体异常(如 NullPointerException),程序抛出该异常时自动暂停,快速定位空指针等常见 Bug。
Python(VS Code):
配置 launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "调试Python脚本",
      "type": "python",
      "request": "launch",
      "program": "${file}", // 当前打开的脚本
      "args": ["--env", "dev"], // 脚本入参
      "justMyCode": false // 调试第三方库代码(如需定位依赖包问题)
    }
  ]
}

避坑点:
Python 调试时,justMyCode 默认开启,会跳过第三方库代码,如需调试依赖包问题需关闭;
调试多进程 / 多线程代码时,需开启「线程 / 进程调试」,否则仅能调试主进程 / 主线程。

三、常见调试坑点与解决方案

1:环境不一致导致的 Bug(本地正常,测试 / 生产报错)

原因:依赖版本、配置文件、环境变量、时区 / 编码等不一致;
解决方案:
记录本地环境信息(npm list/pip freeze/java -version),与测试 / 生产环境对比;
使用容器化(Docker)统一环境,确保本地与线上环境一致;
日志中记录环境信息(如 process.env.NODE_ENV/System.getProperty("env")),便于排查环境相关问题。

2:并发 / 异步导致的偶发 Bug

原因:多线程 / 多进程竞争资源、异步代码执行顺序不可控;
解决方案:
日志中添加「线程 ID / 请求 ID」,追踪同一请求的所有日志(前端:requestId;后端:Thread.currentThread().getId());
断点调试时,锁定线程(Java)/ 使用「单线程模式」(前端),复现并发问题;
避免在异步代码中修改共享变量,使用锁 / 原子操作 / 不可变数据结构。

3:数据类型 / 边界值导致的 Bug

示例:前端传参为字符串 '123',后端按数字 123 处理,导致比较失败;循环中未处理空数组 / 空对象;
解决方案:
调试时重点检查变量类型(前端:typeof/Object.prototype.toString.call();后端:instanceof/type());

# Python 防御性判断示例
def process_data(data):
    if not data: # 处理 null/空列表/空字典
        logger.warning("数据为空,跳过处理")
        return []
    # 后续逻辑

4:调试后忘记移除调试代码

后果:console.log 泄露敏感信息、断点影响性能、调试代码导致生产环境报错;
解决方案:
使用 ESLint 规则(no-console)/IDE 检查,提交代码前检测调试代码;
后端使用日志框架的「环境级别控制」,生产环境关闭 DEBUG 级别日志;
使用 Git 钩子(pre-commit),自动检测并提示移除调试代码。

四、调试效率提升:工具与工作流搭配

除了基础的日志和断点调试,搭配以下工具能进一步提升调试效率:

前端:

Redux DevTools:调试状态管理,回溯状态变化;
Network Inspector(Chrome):查看接口请求 / 响应,模拟请求重放,定位接口参数 / 返回值问题;
Vue DevTools/React DevTools:调试框架专属状态、组件 props/state。

后端:

Postman/Apifox:调试接口,模拟不同参数请求,定位接口逻辑问题;
jstack/jmap(Java):分析线程死锁、内存泄漏;
pdb(Python):命令行断点调试,适配无图形界面的服务器环境;

通用:

Fiddler/Charles:抓包工具,调试前后端交互、第三方接口问题;
Diff Tool(VS Code/IDEA):对比代码版本,定位 Bug 引入的提交记录。

最后:调试的核心是「思路」,提效的核心是「工具」

代码调试的本质,是通过「日志 + 断点 + 工具」还原 Bug 发生的完整场景,找到问题的根本原因,而非临时修复表面现象。掌握调试技巧的同时,高效找到适配的调试工具、提效资源,也能大幅减少调试外的时间消耗。

我平时除了使用上述调试工具,还会在 https://bbab.net/ 这个专为数字工作者打造的创作者导航站中,找技术创作相关的资源 —— 比如调试完成后,写技术教程、做调试技巧分享所需的 AI 创作工具、排版工具、效率办公资源,它覆盖 AI 创作、内容创作、效率办公等领域,所有资源均经过精选,不用全网翻找,省出更多时间专注于代码开发与技术创作。

调试能力是开发者的核心竞争力之一,建议大家在日常开发中刻意练习调试思路,总结常见 Bug 的排查方法,形成自己的调试工作流。记住:好的调试习惯,能让你少走 80% 的弯路,把时间留给更有价值的代码设计与功能实现。

核心要点总结

日志记录需包含「时间戳、模块、级别、上下文、具体信息」5 要素,避免无意义输出和敏感信息泄露;
断点调试优先使用「条件断点 / 日志断点」,减少无关干扰,异步 / 并发代码需针对性设置断点;
规避环境不一致、并发、边界值等常见调试坑点,搭配专业工具提升调试效率;
调试后及时清理调试代码,通过规范和工具避免生产环境问题。

最近的达沃斯论坛上,科技领袖们纷纷出来发表观点。当 Google 的 Demis Hassabis 和 Anthropic 的 Dario Amodei 在讨论更宏观的 AGI 话题时,微软 CEO Satya Nadella 与英国前首相 Rishi Sunak 的对话,更聚焦在了 AI 应用的话题。

 

Satya 以自己参加达沃斯的准备工作变化为例,来说明在企业内部,AI 正在打破传统层级架构,让信息流实现扁平化。

 

“自从我 1992 年参加以来,直到几年前,流程都没什么变化:我的现场团队会准备笔记,然后送到总部进一步提炼。但现在我直接找 Copilot 说,“我要见 xxx,给我一个简介”。它会给我一个全方位的视角。”“我做的是立即把这个简介分享给所有部门的同事。”

 

他指出,企业 AI 应用呈现出明显的 “杠杆效应”:初创公司能从零开始构建适配 AI 的组织,落地速度更快;大型企业虽手握数据、资源优势,但传统工作流程与组织惯性带来的变革管理挑战更大。而无论大小企业,都需经历 “思维转变 — 技能培养 — 数据整合” 的艰苦过程。

 

人才方面,他认为全球 AI 技术人才与初创公司的质量已无显著差异:“雅加达、伊斯坦布尔的人才技术水平并不逊色于西雅图、旧金山。”真正的差距在于大规模应用的推进力度。

 

Satya 表示,判断 AI 是否存在泡沫,关键也在于落地应用:若仅停留在科技公司的技术讨论,泡沫风险确实存在;但当 AI 加速药物临床试验、提升农业生产效率、优化公共服务时,技术就已转化为实实在在的经济价值。

 

今天,Satya 参加 All-In Podcast 的采访也发布了,这次谈话与 Rishi 那次比,有部分话题重合,但也更微观一些。他谈到,科技行业每十年换一批竞争对手是好事,能倒逼企业保持竞争力,科技产业蛋糕会持续变大,绝非零和博弈。而微软与 OpenAI 合作的核心逻辑:不押注单一模型,而是打造算力+应用服务器层的平台,兼容多模型生态。

 

他还提到,公司内部全球网络团队已用 AI Agent(数字员工)自动化处理光纤挖断、设备故障等 DevOps 重复工作,完全是自下而上的落地实践。此外还将 LinkedIn 等团队各角色合并为“全栈构建者”,重构 AI 产品工作流。现在,微软正在尝试新学徒制模式:由资深 IC 工程师带一组应届生,借助 AI 加速新人生产力爬坡,以适配 AI 时代的人才培养方式,新人仍需持续进入职场。

 

国际竞争方面,他认为,美国技术栈的核心优势是生态效应(平台之上生态收入远超自身收入),而非单纯市场份额,技术“扩散”是做大全球蛋糕,而非抢蛋糕。

 

我们翻译并整理了这次访谈内容,并在不改变原意基础上进行了删减,以飨读者。

 

移民政策下的一段“奇妙经历”

 

Jason:今天非常高兴,能请到重量级嘉宾 Satya Nadella,Microsoft 的第三任 CEO,和我们的 AI 与加密领域负责人 David Sacks 来一场即兴炉边对话。Satya 出生在印度,大学毕业后来到美国,这一路经历本身就很传奇。你在书里写过,为了把太太接来美国,还专门“折返”了一趟。能不能简单和大家讲讲当时是怎么回事?

 

Satya:这件事其实是美国移民政策下的一段“奇妙经历”。我和太太在印度读的是同一所大学,后来我来美国读研究生,我们结了婚。我拿到了绿卡,但问题是由于我们是结婚后才申请,她反而不能直接过来。结果就是,我不得不放弃已经拿到的绿卡。

 

最有意思的是,我去新德里的美国使馆,问工作人员:“请问放弃绿卡要排哪一队?”他们直接说:“没有这种队伍。”在九十年代,主动放弃绿卡绝对算是件“疯狂”的事。但为了让她能以 H1 签证过来,只能这么操作。好在最后一切都解决了,现在想起来更像是一段久远但有点荒诞的回忆。

 

Jason:我想聊聊 Copilot。你们最早在 GitHub 上推出 Copilot,后来做到桌面端,再到直接把它放进 Windows,这对 Microsoft 来说是个非常大胆的决定。我每天都在用。但老实说,在它还不能真正理解文件系统、也没法和应用深度交互之前,市场反应不温不火。不过现在你们明显在持续加码。

 

在我看来,面向知识工作者,AI 正在走向三种形态:一类是 Elon 在 xAI 做的那种“人类模拟器”,据说直接把“虚拟员工”塞进聊天和邮箱系统;一类是 Claude 刚发布的协作型 Agent,强得离谱,很多人已经被震住了,我自己连续玩了四十多个小时。

 

那 Microsoft 的愿景是什么?知识工作者究竟该怎么真正把这些东西用起来?现在大家更多还是在“玩 ChatGPT”,这和真正创造商业价值之间好像还有一道鸿沟。

 

Satya:要理解这些不同形态,最好的切入口其实是编程,代码工作几乎是最典型的知识工作。

 

回头看这条演进路线:最早是“Next Edit Suggestions”,也就是智能补全。老实说,我对这一代 AI 技术真正建立信心,就是从早期 Codex 那一代模型开始的。那还是 GPT-3.5 之前,但补全已经相当准确了。后来我们有了 chat 交互,再往后是可执行的 actions,现在则是全自主 Agent。这些 Agent 既可以在前台,也可以在后台;可以在云端,也可以在本地运行。

 

有意思的是,这些形态今天在编程中都有,而且你会全部用到,而非只选其中一种。比如我在 CLI 里,可以有前台 Agent、后台 Agent,同时直接在 VS Code 里改代码,这些全部并行进行。这说明了不同形态是可以组合的。

 

把这套放到知识工作上也是一样。我们是从 chat 开始,带推理的 chat 不只是一问一答,你能看到它完整的思考过程;现在到了 actions 阶段,通过模拟电脑操作、Skill 和 Agent 调用调用来执行任务,这就是 Copilot 如今的状况。

 

接下来,其实需要一个新的“隐喻”来理解 AI 时代的计算机。Jobs 当年形容 PC 是“思维的自行车”;Bill Gates 说过一句我很喜欢的话:“信息触手可及”。但在 AI 时代,我们需要新的说法。我很喜欢 Notion CEO 的一个比喻:“无限思维的管理者”。这个说法非常形象。

 

Jason:确实是个很棒的产品。不过你们还没收购它。

 

Satya:还没有(笑)。但这个比喻点中了关键:你同时在和大量 Agent 协作。我自己还常用两个词:宏观委派和微观引导,即你把一整块工作交出去,同时在执行过程中不断给细节指令。写代码其实已经是这样了。这正是今天 Copilot 的真实状态。

 

还有一种我特别期待的形态,很快你们就会看到:开发者并不是只待在自己的 repo 里。我们要开会、写设计文档、实现别人写好的规格说明,还要保证代码和这些内容一致。这就意味着,Copilot 需要能通过 MCP Server 之类的方式,把我的工作流、待办事项、上下文全部拉进来。这才是真正的知识工作“组合”。

 

安全领域也是一样。一个安全工程师面对的是海量日志:把日志放进文件系统、用代码分析、生成仪表盘,这些都是 AI 能大幅放大的知识工作场景。

 

数字员工如何进入企业

 

Jason:那“数字员工”“数字同事”这种概念呢?是不是也在你们的规划里?

 

Satya:核心问题其实是“身份”。我们推出了 Agent 365,就是把今天给人用的身份体系、终端防护体系,扩展到 Agent 身上。

 

Jason:也就是说,你可以“克隆”一个我,让他在 HR 或市场部里工作?

 

Satya:没错。在 Office 体系里完全可以做到。这里有两种模式:一种是,每个知识工作者都拥有“无限个大脑”;另一种是,创造完全独立于你个人身份的 Agent。而身份这件事非常关键,权限、决策、责任追溯等全都依赖它。

 

Jason:说到底,就是搞清楚“谁对谁做了什么”。

 

Satya:正是如此。对任何组织来说,最重要的问题之一就是:工作是谁完成的、怎么完成的、来源是什么、能不能追溯,所以要么是“人 + 一堆 Agent”,由人来做宏委派、微观引导,要么就是一个完全独立的身份在运作。

 

Jason:过去几年,Microsoft 的员工数量基本没变,但收入多了 900 亿美元,利润还翻了一倍。你们也像 Alphabet、Meta 一样,削掉了不少中间管理层。这是因为自动化?还是以前人确实有点多?

 

Satya:你抓住了一个非常关键的问题。我认为,这是自 PC 普及以来,知识工作最大的结构性变化。想想 PC 之前,一家跨国公司怎么做预测?传真、内部备忘录满天飞,最后凑出一份结果。后来 PC 成了标配,Excel + Email,让流程和产出物全变了,今天正在发生同样级别的变化。

 

举个例子,在 LinkedIn,我们以前有产品经理、设计师、前端工程师、后端工程师,后来我们把前面这些角色合并、扩大职责范围,统一成“全栈构建者”。这是结构性的调整,它改变了工作本身,也改变了工作流。

 

Jason:沟通成本一下就下来了,速度自然更快,一个人就能“vibe coding”。

 

Satya:没错,而且 AI 产品本身也有一套全新的工作流:从评测、到科学建模,再到基础设施。评测和产品由新的“全栈型 PM / Builder”完成,系统工程师负责支撑后端科学和基础设施,这是一个全新的闭环,必须从组织结构上去适配。

 

当然,对 Microsoft 来说,我们不可能只活在未来。现在,我们要一边把 Windows 的热补丁做好、质量做到位;一边还要持续提升 Copilot 的评测体系和质量,这两件事都必须是第一优先级的。

 

“每十年换一批竞争对手”

 

Jason:这大概是你职业生涯里最具挑战性的阶段吧?过去 Microsoft 在很多领域是双寡头甚至垄断,但现在面对的竞争完全不一样。

 

Satya:确实非常激烈。但我一直觉得,每十年换一批竞争对手,其实是好事,它能让你保持“体能”。我 1992 年加入 Microsoft,那时最大的对手是 Novell;现在是 2026 年,环境完全不同。竞争很残酷,但从 GDP 占比来看,五年后科技产业一定更大,这不是一个零和游戏。

 

Jason:蛋糕在变大。

 

Satya:而且会大得多。整个技术栈对社会的影响会极其深远。最终的问题是 Microsoft 的品牌定位是什么?客户期待我们提供什么?有时候我们会误以为,所有客户对所有厂商的期待都是一样的,但真正重要的是弄清楚客户“希望从你这里得到什么”。这其实是 Peter Thiel 那个观点的另一种表达:不是逃避竞争,而是通过理解客户,找到你真正不可替代的位置。

 

David:这次在达沃斯,既有不少国家领导人,也有大量《财富》世界五百强公司的 CEO。昨晚晚宴上,有人问你一个问题:他们该如何看待 AI,怎样才能真正把 AI 用好。我记得你当时提到了“扩散(diffusion)”这个词,这一点和我最近参与的一些政策研究高度契合。能不能展开讲讲你的想法?

 

Satya:当然可以。事实上,你们一直在做一件非常重要的事,就是确保以美国为代表的技术栈,能在全球范围内被广泛采用、并且被信任。

 

回过头来看,技术本身只是起点,真正的价值来自于被大规模、深入地使用。我一直很喜欢一项研究,是 Diego Comin 做的,研究的是工业革命时期各国是如何实现领先的。结论其实很简单:那些把最新技术引入本国,并在此基础上做价值叠加的国家,最终跑得最快。说白了,不要重复造轮子,而是先用最先进的,再在上面持续创新。

 

这正是“扩散”的意义所在。像 AI 这样的通用型技术,关键在于能不能真正铺开。就拿美国来说,技术我们已经有了,但问题是:它有没有进入医疗?有没有进入金融?有没有进入所有行业?不只是大企业,也包括中小企业和公共部门。如果看不到这种广泛而密集的应用,就谈不上真正的成功。

 

现在我们正处在这样一个阶段:AI 正在更快地“扩散”。你们做的那些政策层面的工作其实非常关键。好消息是,技术已经成熟了,云计算和移动互联网这些“基础设施轨道”早就铺好了,这让 AI 的传播成为可能。现在真正的问题不在算力能不能拿到,而在于具体的应用场景是什么,以及组织如何管理随之而来的变化。

 

在达沃斯,还有一个常被提起的问题:发达国家之外,全球南方怎么办?我反而觉得这里蕴含着巨大的机会。在很多全球南方国家,公共部门在 GDP 中的占比非常高。想象一下,如果 AI 能显著提升政府把纳税人资金转化为公共服务的效率,哪怕只提升一点点,那可能就是几个百分点的 GDP 增长。

 

所以我非常乐观,我认为会形成一种强烈的拉动力,而美国也应该把我们已有的技术栈,推动在欧洲、亚洲、南美、非洲等地广泛落地。

 

David:我经常被问到一个问题:这场 AI 竞赛,怎么判断谁在赢?或者美国是不是领先全球?我给出的答案很直接:看市场份额。如果几年后我们放眼全球,看到美国公司的技术占据了绝大多数市场,那说明我们做对了;如果看到全球到处用的都是中国的芯片和模型,那可能就意味着我们输了。说到底,使用情况才是最真实的检验标准。

 

Satya:我同意。但你也在 Microsoft 工作过几年,应该记得 Bill Gates 对“平台”的理解。对我来说,除了市场份额,更重要的是生态效应。美国一直以来的优势,不只是本国公司的收入规模,而是围绕平台形成的完整生态。

 

我在 Microsoft 学到的一点是,每次去一个国家访问,最先看的不是我们卖了多少软件,而是围绕 Microsoft 平台,在当地创造了多少就业岗位。比如有多少渠道伙伴、多少 ISV、多少相关的 IT 从业者。我们有一整套指标,衡量一个国家的生态是如何围绕平台建立起来的。

 

这正是美国技术栈过去在全球,包括在中国,能够被广泛采用的原因:当地公司能在上面构建自己的产品和业务。这种事情还会再次发生。所以你们推动“扩散”的工作,本质上不是在抢蛋糕,而是在把蛋糕做大,增强对平台的信任,从而带来真正的经济机会。

 

David:你这么一说,我确实想起了一些往事。那还是十多年前,Yammer 被 Microsoft 收购,我们并入了 SharePoint 团队。当时产品经理们非常自豪的一点是:围绕 SharePoint 的生态收入,即非 Microsoft 的咨询公司、实施伙伴创造的收入,其规模是 Microsoft 自身软件收入的好几倍。Bill 也说过一句话:只有当平台之上的收入,显著超过平台自身的收入时,你才算真正拥有一个生态。所以,当我们谈“扩散”,希望美国保持领先地位,并不意味着这对世界其他地方是坏事。恰恰相反,其他国家和公司可以在这个平台之上创造出更大的价值。

 

Satya:完全同意。这一点非常关键。这不是“美国技术、美国收入”的问题,而是在用一个新平台在全球范围内创造机会。

 

我 90 年代做数据库产品时,和 SAP 有过深度合作。SQL Server 和 R/3 的结合,对双方都是巨大的成功。大家常提 Intel 和 Microsoft,但对我个人成长影响很深的一件事其实是和一家欧洲软件巨头的合作。放到今天也是一样,谁知道下一个伟大的 AI 应用会出现在哪里?我始终相信,即便基于美国的技术栈,世界各地都可能诞生顶级的科技公司。

 

与 OpenAI 合作背后:所有公司、应用会同时用多种模型

 

Jason:你不仅是技术领袖,也是一位非常出色的并购操盘手,这一点其实被外界低估了。你和 Sam Altman、OpenAI 的合作,被认为既高明又充满争议。有人说,这笔交易可能让 Microsoft 获得巨额回报,但也有人质疑:你是不是亲手培养了一个未来最强的竞争对手?尤其是考虑到 Microsoft 过去错过了移动互联网浪潮,你们为什么不自己做一个 Gemini、xAI 或 Claude?

 

Satya:我理解这种疑问。很多人问我:你们自己的基础模型在哪里?从知识产权角度说,我们确实拥有相关能力,但更重要的是,Microsoft 现在的战略有几个层面。

 

首先,我们要把“算力工厂”做好。Azure 是我们最大的业务之一,而随着 AI 的发展,它的市场空间会变得极其庞大,这要求我们在异构基础设施管理、软件调度和资源利用率上做到极致。

 

其次,是应用服务器层。未来,每个人都在构建 Agent,有强化学习环境、有评测体系,就像每一代平台都会有自己的应用服务器一样。我们现在在做的 Foundry,就是这个定位。

 

在这一层里,有一点已经非常清楚:任何应用、任何公司,最终都会同时使用多种模型。为什么不用呢,甚至在一个具体任务里,编排多个模型协同工作,效果往往比单一的前沿模型更好。我们在医疗领域做过一个“决策编排”的实践,仅仅通过给模型分配不同角色再进行协同,就能显著提升结果质量。

 

Jason:那是不是可以理解为,你其实看好开源模型,认为大模型本身会逐渐商品化,真正的价值不在这里?

 

Satya:我更愿意把它类比成数据库市场。最早大家觉得数据库就是 SQL,后来才发现并不是。关系型、文档型、NoSQL,各种数据库层出不穷,甚至出现了大量开源项目和围绕它们建立的公司。模型也会是类似的演进路径,会有闭源的前沿模型,也会有达到前沿水平的开源模型。

 

接下来一个非常重要的方向是:企业能否把自身的隐性知识,真正嵌入到自己掌控的模型权重中。有人问我未来会有多少模型,我的回答是:可能和世界上有多少家公司一样多。这听起来极端,但在我看来,这正是“知识经济”向“AI 经济”转变的方式。

 

Jason:那你有没有在 Windows 桌面上,悄悄推进一个本地运行的大模型?

 

Satya:其实已经在发生了,现在已经有完全驻留在本地、基于 NPU 和 GPU 的模型。高性能工作站正在回归,这本身就是一件非常有意思的事。

 

Jason: 明白了。所以 Microsoft 当然会重视 PC,这毕竟是你们的主场,有完整的桌面生态。

 

Satya:是的,本质上这是个商业问题。我们一直认为“形态”非常重要。我常开玩笑说,我的职业生涯是从命令行开始的,说不定最后也会回到命令行。但不管怎样,形态一直在演进。

 

Jason: 你当年起步时用的是 Sun 那种最早的工作站,价格五千到一万美元。你能想象有一天,你会向客户推荐一台一万到两万美元的桌面机,里面内置 LLM 和强悍硬件吗?

 

Satya:完全有可能。你可以插一张 DGX 卡,做出一台非常强的机器。其实在模型架构上,我们可能只差一次关键调整就能实现某种分布式模型架构,比如真正能自我调度的 MoE 架构。这类突破会彻底改变“混合 AI”该是什么样子。

 

但不管怎样,我们非常明确:PC 必须成为本地模型的最佳载体。本地模型可以承担大量 prompt 处理,再按需调用云端能力。这里面还有大量工作空间,这也是我们正在坚定推进的方向。

 

David: 云与本地的协同已经证明了,能直接访问本地文件系统,本身就非常有价值。这让我想到 Yammer。很多人可能不知道 Yammer 当年最大的特点,是用消费级增长打法去攻企业软件。站在今天去看企业 AI 的采用,你觉得未来一年会怎么“扩散”?现在好像正处在一个关键点:会是自上而下,由 CEO 拍板、搞战略转型、走 RFP;还是自下而上,由一批 AI 原生员工先用起来,把工具带进工作中,做出惊人的成果?

 

Satya:说实话,我觉得两种都会发生。自上而下的原因很简单:在客服、供应链、HR 自助这些场景里,AI 的 ROI 非常清晰,IT 和 CXO 很容易拍板,这也是目前最先落地的一波真实 AI 应用。

 

但最终真正改变组织的,一定是自下而上的力量。回看 PC 的历史也是这样:最早是律师把 Word 带进公司、财务把 Excel 带进来,后来有了邮件,最后才变成标配。现在正在重演这个过程。比如说 Agent,现在几乎所有人都在做 Agent,本质是在重构工作流,把大量重复、枯燥的事情自动化掉,这正是自下而上转型的起点。

 

说实话,我最兴奋的也是这种变化。以 Microsoft 为例,我们在全球管理着五百多个光纤运营点,尤其在亚洲。我自己以前都没意识到,这些所谓的 DevOps,其实很大一部分是物理资产:光纤会被挖断、设备会出故障。所谓 DevOps,很多时候就是在不停地发邮件问“这张光纤卡怎么了”“怎么修”。

 

现在负责全球网络的同事,已经构建了一批“数字员工”,本质就是 Agent 在自动处理这些 DevOps 工作。这完全是自下而上的:工具已经在那里了,我就用它来做自动化,减少重复劳动,提高效率和质量。

 

而这些能力最终能不能规模化,关键不在“学会没有”,而在“用不用”。所谓技能提升并不神秘,就是在实际使用中完成的。工具扩散、工具被真正用起来,这才是最重要的事情。

 

“我们在尝试新的学徒制模式”

 

Jason: 正因为如此,现在用这些工具去赋能现有员工,比招人、培养新人要容易得多。站在今天看,如果 Microsoft 规模不变,三、四十年后谁会接我的工作?你们是典型的技术优先公司,理论上已经没有太多理由继续增加员工数量,这几年你们也基本没扩张,只是在内部结构上做了调整。

 

那你怎么看下一代?对那些现在还没拿到 Microsoft offer 的应届生,你会给什么建议?以前你花了很多精力去培养这群人,但现在好像没那么“奢侈”了。

 

Satya:这是个好问题。现在确实有争论:职业早期会发生什么变化、校园招聘还重要吗?我依然坚定相信校园招聘,因为 AI 会彻底改变一个人掌握代码库、建立熟练度的速度。

 

过去,新人进团队的爬坡期很长;现在不一样了,有文档、有技能库,还可以直接问 Agent,本质上就像身边有一个极其强大的导师帮你快速上手代码。换句话说,应届生的生产力曲线会比以往陡得多。

 

我们也在尝试新的学徒制模式:让一位资深 IC 工程师带一组应届生一起工作,因为这本身就是一种全新的工作方式。以前大家进 Microsoft 后会去读 Dave Cutler 的代码,理解什么是顶级工程实践;而现在,顶级实践更多体现在十倍、百倍工程师是如何借助 AI 打造高质量产品的。对于这些经验,新一代毕业生会学得更快。

 

对 Microsoft 这样的公司来说,这是好事。毕竟只要人类还没解决“永生”问题,我们就需要新人进入职场、在 Microsoft 成长。所以我们依然会积极投入,只是会确保岗位的边界和内容,让其既符合现有员工的期望,也符合新入职者的追求。

 

参考链接:

https://www.youtube.com/watch?v=5nCbHsCG334

这里记录每周值得分享的科技内容,周五发布。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系[email protected])。

封面图

巫山县城建在山坡上,为了方便居民和促进观光,在中轴线上建设了神女大扶梯,总长905米,高240余米,相当于80层楼,全程需要20分钟。(via

独立软件的黄昏

软件可以分成两种:一种是公司开发的,另一种是个人开发的。后者就称为"独立软件"(indie software)。

它的历史非常悠久,从古至今,很多程序员依靠出售独立软件谋生。

有一种东西"共享软件"(Shareware),年轻的朋友未必知道,二三十年前曾经非常流行。用户免费使用软件的试用版,如果满意,就向开发者购买一个注册码。

这就是一种独立软件,当年很多著名软件都是这个模式,比如国外的 WinZip 和 WinRAR,国内的网络蚂蚁(NetAnts)、网际快车(FlashGet)、豪杰解霸。

时至今日,大家看看目前流行的软件,还有多少属于独立软件?你每天使用的软件,又有多少是个人开发的?

很少很少了。

一位二十年的独立软件开发者哀叹现在的市场上,公司开发的比重越来越大,个人开发的比重越来越小,独立软件正在没落。

"我销售自己的软件20年了,2005年以后,互联网开始普及,独立软件迎来了黄金年代。而最近两三年,环境一直在快速变化,销售明显变难了,我感觉自己越来越难维持生计了。"

独立软件的大发展,是从2005年开始的。

  1. 互联网的普及,网民数量急剧增长。
  2. 智能手机创造了手机软件,一个全新的软件大市场。
  3. 在线支付的普及和简化。
  4. 互联网使软件分发变得容易且免费。
  5. 免费的高质量开发工具(编译器、IDE、版本控制系统、Web 服务器)不断涌现。

这些因素让程序员切切实实获利了,要是你再做一些 SEO、买一些付费广告,完全可能赚到大钱。很多人就是这样发展起来的,从独立软件变成了大公司。

但是,最近两三年情况变了,上面这些因素都到头了。

独立软件正在慢慢退潮,你能够想起名字的独立软件越来越少,更不要说掏钱购买了,即使有也是多年前的作品。根据我的观察,依靠出售自己软件维生的程序员似乎也在减少。

主要原因有下面几个。

(1)AI 改变了互联网流量,独立软件失去了推广渠道。网站的访问量显著减少,人们更多跟大模型交互,而不是浏览网页。通过搜索引擎和在线广告获取流量的策略,越来越没有效果。

视频是为数不多仍然有效的推广渠道之一,但制作视频非常耗时,而且竞争异常激烈。另外,AI 生成的劣质视频迟早会大量出现,推广效果也会变差。

(2)AI 使得软件开发变得容易。它加快了开发速度,降低了进入门槛,让更多人加入竞争。以前,用户可能购买某个功能,现在直接让 AI 生成即可。

(3)新软件汗牛充栋,越来越难脱颖而出。iPhone 应用商店有大约200万个应用,用户很难发现你。另一方面,应用商店更喜欢推广那些能帮它赚更多钱的大公司软件,而不是独立软件。

(4)人们越来越习惯使用基于网络的软件,独立软件属于需要下载安装的原生应用,它的市场在萎缩。

基于网络的软件与其说是产品,不如说是一种服务,全天候24小时可用的服务。越来越多的个人开发者顺应这种趋势,改为以提供 SaaS 服务为主。

(5)平台的风险。现在的很多独立软件,都依靠云服务商的平台或底层服务,而平台随时会改变规则(比如关闭 API),或者推出竞品,一大批应用随之死掉,这种事情屡见不鲜。

(6)用户期望软件是免费的,或者非常便宜。售价略微高一点,就会无人问津。因此,独立软件要想获得可观的回报,就需要巨大的销售规模,这根本做不到。别的不说,个人开发者完全无力提供满意的客服。

(7)以上这些因素将长期存在,只会加深,不会逆转。独立软件的时代可能真的要结束了,个人开发者以后大概很难靠销售自己的软件为生,而要改为销售自己维护的 SaaS 服务,尽管这也很难。

科技动态

1、VS Code 的定位

微软公司的 VS Code 是非常流行的代码编辑器,市场份额很高。

现在的官网上,它的产品定位是"开源 AI 代码编辑器"。

但是,2025年上半年,它的产品定位还是"你的代码编辑器,由 AI 重定义"。

更早的2024年,产品定位是"重新定义的代码编辑"。

令人感慨啊,这么成功的软件,AI 本来只是附属功能,现在也要蹭热点,把自己包装成 AI 主导的产品。

2、智能脖巾

英国科研人员发明了一种智能脖巾。它围在脖子上,可以感受到穿戴者的心跳和喉部肌肉运动。

它的用户主要是中风后丧失说话能力的人。这些人可以张嘴,做出说话的口型,但是无法正常发音。

他们佩戴这个脖巾后,颈部的运动数据就通过它传给电脑,经过模型训练,可以用电脑语音还原出用户想说的话。

3、雪宝机器人

人形机器人何必一定做成人形。

迪斯尼最近发布了一个机器人,样子就是电影《冰雪奇缘》的雪宝。

它用来在迪斯尼乐园,跟游客互动。

它启示我们,人形机器人做成卡通形状也很好。

另外,LG 公司在美国 CES 展会上,展示了他们最新的家务机器人

这个机器人的功能就是做家务,比如叠衣服和洗碗。我觉得,国内厂商可以借鉴,展示机器人功能时,不要展示跳舞打拳,而要展示如何做家务。

文章

1、别用 MySQL,改用 MariaDB(英文)

曾经的明星数据库 MySQL,最近几个月的代码提交数为0(上图)。作者认为,种种迹象表明甲骨文已经放弃了这个项目。

2、10秒获得 AI 代码评审结果(英文)

本文介绍一个技巧,让 AI 快速给出提交代码的评审结果,方法是不要提交整个代码库,只提交 diff 的部分。

3、使用 Pandoc 生成静态网站(英文)

文档格式转换工具 Pandoc 可以用来生成静态网站,作者介绍自己是怎么做的。

4、锚点元素<a>的一些鲜为人知的地方(英文)

锚点元素<a>用来生成链接,本文介绍如果链接到一些特殊字符的情况。

5、学习自定义元素(英文)

一篇 HTML 自定义元素的教程文章,写得简单清晰。

6、Go、Rust 和 Zig 的一些想法(英文)

作者是一个高级程序员,谈谈他对 Go、Rust、Zig 三种语言的感受。有趣的地方是,这三种语言都没有类,也不支持面向对象编程。

7、我的个人基础设施(英文)

作者介绍他自己的家庭实验室。比较有趣的是,他的个人网站是本地构建后,自动用 Syncthing 同步到服务器,这对小型静态网站确实简单。

工具

1、GoRead

开源的电子书阅读器应用,支持桌面与移动端(Android/iOS)。(@zhashut 投稿)

2、EasyPostman

用于 API 调试的跨平台桌面应用,对标 Postman + JMeter。(@lakernote 投稿)

3、Port Sentinel(端口哨兵)

Windows 桌面应用,查看端口占用情况。(@Sanjeever 投稿)

4、Building Sunlight Simulator

基于 Web 的楼盘采光 3D 日照模拟工具,帮助购房者评估小区采光。(@SeanWong17 投稿)

5、Office App

一个纯本地的 Office 网页应用,可以离线在网页创建/编辑 Word、Excel、PowerPoint 文件。(@baotlake 投稿)

6、ScreenshotSnap

免费的网站截屏在线工具,提供 API,可以直接将截图代码插入网页。(@phpiscute 投稿)

7、tsshd

SSH 服务器登录协议的全新实现,特点是连接不掉线,可以重连前一个对话。(@lonnywong 投稿)

8、AirScan-QR

一个开源网页应用,通过动态二维码发送/接收文件。(@topcss 投稿)

9、LuCI Bandix

开源路由器操作系统 OpenWRT 的一个插件,可以监控局域网各设备的实时流量和目的地。(@timsaya 投稿)

10、pure-genealogy

开源的网页族谱工具,用来生成家族族谱,基于 Next.js + Supabase。(@yunfengsa 投稿)

11、mdto.page

这个网站免费将 Markdown 文件转成 HTML 格式,发布成公开访问的网页。

AI 相关

1、ChatGPT 翻译

OpenAI 悄悄发布的翻译功能,只有在官网可用。

2、Mango Desk

一个跨平台的桌面应用,使用自然语言进行本地文件搜索。(@moyangzhan 投稿)

3、OpenWork

Claude 公司新产品 CoWork 的开源替代品,让普通用户不编程,就能完成文件操作,定位就是"Claude Code 的非编程版"。

另有一个类似项目 Open Claude Cowork。(@aiagentbuilder 投稿)

4、Wolfcha(猹杀)

开源的网页游戏 AI 狼人杀,除了玩家自己,其他所有角色(女巫、猎人、守卫、狼人等)都由 AI 扮演。(@oil-oil 投稿)

资源

1、维基百科25周年

维基百科是2001年1月13日上线的,今年是25周年纪念。这个网站是官方的纪念网站,以互动形式展示了发展历程。

另外,还有一篇文章,介绍互联网档案馆的历史(下图)。

2、HTTP:COLON

这个网页可以查看指定网站返回的 HTTP 标头,详细解释每个字段的含义。

3、现代 Java(Modern Java)

面向初学者的 Java 语言教程。

图片

1、中国新能源建设的惊人规模

90后摄影师储卫民拍摄的中国新能源建设。

他说:"从地面上很难体会这些发电厂的规模,但当你升到空中时,就能看到它们与山脉、沙漠和海洋之间的关系。"

青海冷湖镇

浙江象山县

青海塔拉滩

内蒙古阿拉善

"我一开始只是拍摄风景,但2022年我去贵州、云南、青海等地旅行时,不断看到风力发电场和太阳能发电厂出现在我的镜头里。我意识到这就是我们这个时代的故事----但几乎没有人系统地记录它。"

文摘

1、谷歌14年工作的教训

大约14年前,我加入谷歌,以为这份工作就是编写优秀的代码。

这个想法部分正确。但随着时间的推移,我越来越意识到,真正成功的工程师不一定是最优秀的程序员,而是懂得驾驭代码之外一切的人。

下面就是我得到的经验教训。有些教训是我走了几个月的弯路得到的,还有一些需要数年才完全领悟。它们都与具体的技术无关----技术变化太快,根本无关紧要。

(1)工程师想在大公司生存,必须学会沟通。

因为在大公司,团队是组织的基本单位,推进项目必须跟其他团队沟通。项目越大,你花在跟其他人、其他团队沟通的时间就越多,比编写代码的时间还多。大多数"慢"的团队实际上是不沟通的团队。

为了顺利沟通,清晰是第一位的要求。它不仅可以加快沟通,还能降低代码风险。最优秀的工程师都会用清晰易懂的代码来代替炫技。

为了提高表达的清晰性,你可以尝试写作和去教别人。如果你能用简单的语言解释某件事,你就是真的理解它了。

(2)想要得到晋升,必须有人为你说话。

职业生涯初期,我曾认为优秀的工作成果代表了一切,但我错了。代码默默地躺在代码库里,不会为你说话。

那些对你至关重要的会议,你本人很可能没有机会参加。你需要你的经理、同事在会上提到你、推荐你。他们可能这样做,也可能不会。

平时工作中,你尽量不要为自己增加阻力。如果开会的时候,你赢得每一场辩论,很可能就是在积累无声的阻力。你之所以"赢",不是因为你说服了别人,而是因为他们不再与你争论,放弃了,将会在其他场合表达这种不满。

(3)专注于你能控制的事情,忽略你无法控制的事情。

很多事情,你改变不了,不要为这种事情烦恼。这不是被动接受,而是策略性分配精力。如果你把精力浪费在无法改变的事情上,就等于放弃改变那些原本可以改变的事情。

(4)简化工作往往可以提高绩效。

当系统运行缓慢时,人们的第一反应是增加缓存层、并行处理和更智能的算法。有时这样做没错,但我发现,删除不必要的工作几乎总是更有效果。下次进行优化之前,你要先问问自己这项工作是否应该存在。

(5)时间比金钱更有价值,你要抓紧时间。

职业生涯初期,你用时间换取金钱,各种事情都做----这无可厚非。但到了某个阶段,情况就完全不同了,你会开始意识到,时间才是不可再生资源。你要专注于那些对你最重要的事情,放弃其他事情。

言论

1、

-- 一位程序员评论 OpenAI 宣布在 AI 对话中加入广告

2、

Netflix 的电影不追求视觉效果,因为大多数观众是在手机、平板和笔记本电脑上看,内容不需要为大银幕制作、而是为小屏幕制作的。

-- 马特·达蒙,美国著名演员

3、

我从未见过哪个群体比程序员更热衷于分享知识。其他行业都是严守知识、保守秘密,程序员则是免费提供源代码、书籍、博客文章、演示文稿、视频教程等等。

编程领域没有什么神圣不可侵犯的东西。如果你想学习,你可以找到免费书籍、完整的源代码、论坛、聊天室、邮件列表、线下聚会、博客文章、视频讲座、教程以及你可能需要的一切资源。尽管举手,总会有人乐于助人,倾囊相授。

-- 《我是如何学习所有编程知识的》

4、

今年的 iOS 26 中,一些 UI 元素利用 HDR 屏幕,采用高光,比纯白色更亮。如果你曾经在 iPhone(或其他任何支持 HDR 的屏幕)上看过 HDR 照片,然后再看看以 SDR 模式显示的 UI,你就会知道它看起来有多么灰暗黯淡。

-- 《亮模式的膨胀》,作者发现 iOS 每年都变得更亮,容易产生视觉疲劳,让他不得不使用暗模式

5、

如果你想批评大型组织的运作方式,首先要了解它们为何如此运作。否则,批评会显得尖锐,但却毫无意义。

-- 《关于大型软件公司的常见误解》

往年回顾

年底的未来已来(#335)

为什么 PPT 不如备忘录(#285)

青年失业率与选择创业(#235)

美国宪法拍卖,一个区块链案例(#185)

(完)

这里记录每周值得分享的科技内容,周五发布。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系[email protected])。

封面图

巫山县城建在山坡上,为了方便居民和促进观光,在中轴线上建设了神女大扶梯,总长905米,高240余米,相当于80层楼,全程需要20分钟。(via

独立软件的黄昏

软件可以分成两种:一种是公司开发的,另一种是个人开发的。后者就称为"独立软件"(indie software)。

它的历史非常悠久,从古至今,很多程序员依靠出售独立软件谋生。

有一种东西"共享软件"(Shareware),年轻的朋友未必知道,二三十年前曾经非常流行。用户免费使用软件的试用版,如果满意,就向开发者购买一个注册码。

这就是一种独立软件,当年很多著名软件都是这个模式,比如国外的 WinZip 和 WinRAR,国内的网络蚂蚁(NetAnts)、网际快车(FlashGet)、豪杰解霸。

时至今日,大家看看目前流行的软件,还有多少属于独立软件?你每天使用的软件,又有多少是个人开发的?

很少很少了。

一位二十年的独立软件开发者哀叹现在的市场上,公司开发的比重越来越大,个人开发的比重越来越小,独立软件正在没落。

"我销售自己的软件20年了,2005年以后,互联网开始普及,独立软件迎来了黄金年代。而最近两三年,环境一直在快速变化,销售明显变难了,我感觉自己越来越难维持生计了。"

独立软件的大发展,是从2005年开始的。

  1. 互联网的普及,网民数量急剧增长。
  2. 智能手机创造了手机软件,一个全新的软件大市场。
  3. 在线支付的普及和简化。
  4. 互联网使软件分发变得容易且免费。
  5. 免费的高质量开发工具(编译器、IDE、版本控制系统、Web 服务器)不断涌现。

这些因素让程序员切切实实获利了,要是你再做一些 SEO、买一些付费广告,完全可能赚到大钱。很多人就是这样发展起来的,从独立软件变成了大公司。

但是,最近两三年情况变了,上面这些因素都到头了。

独立软件正在慢慢退潮,你能够想起名字的独立软件越来越少,更不要说掏钱购买了,即使有也是多年前的作品。根据我的观察,依靠出售自己软件维生的程序员似乎也在减少。

主要原因有下面几个。

(1)AI 改变了互联网流量,独立软件失去了推广渠道。网站的访问量显著减少,人们更多跟大模型交互,而不是浏览网页。通过搜索引擎和在线广告获取流量的策略,越来越没有效果。

视频是为数不多仍然有效的推广渠道之一,但制作视频非常耗时,而且竞争异常激烈。另外,AI 生成的劣质视频迟早会大量出现,推广效果也会变差。

(2)AI 使得软件开发变得容易。它加快了开发速度,降低了进入门槛,让更多人加入竞争。以前,用户可能购买某个功能,现在直接让 AI 生成即可。

(3)新软件汗牛充栋,越来越难脱颖而出。iPhone 应用商店有大约200万个应用,用户很难发现你。另一方面,应用商店更喜欢推广那些能帮它赚更多钱的大公司软件,而不是独立软件。

(4)人们越来越习惯使用基于网络的软件,独立软件属于需要下载安装的原生应用,它的市场在萎缩。

基于网络的软件与其说是产品,不如说是一种服务,全天候24小时可用的服务。越来越多的个人开发者顺应这种趋势,改为以提供 SaaS 服务为主。

(5)平台的风险。现在的很多独立软件,都依靠云服务商的平台或底层服务,而平台随时会改变规则(比如关闭 API),或者推出竞品,一大批应用随之死掉,这种事情屡见不鲜。

(6)用户期望软件是免费的,或者非常便宜。售价略微高一点,就会无人问津。因此,独立软件要想获得可观的回报,就需要巨大的销售规模,这根本做不到。别的不说,个人开发者完全无力提供满意的客服。

(7)以上这些因素将长期存在,只会加深,不会逆转。独立软件的时代可能真的要结束了,个人开发者以后大概很难靠销售自己的软件为生,而要改为销售自己维护的 SaaS 服务,尽管这也很难。

科技动态

1、VS Code 的定位

微软公司的 VS Code 是非常流行的代码编辑器,市场份额很高。

现在的官网上,它的产品定位是"开源 AI 代码编辑器"。

但是,2025年上半年,它的产品定位还是"你的代码编辑器,由 AI 重定义"。

更早的2024年,产品定位是"重新定义的代码编辑"。

令人感慨啊,这么成功的软件,AI 本来只是附属功能,现在也要蹭热点,把自己包装成 AI 主导的产品。

2、智能脖巾

英国科研人员发明了一种智能脖巾。它围在脖子上,可以感受到穿戴者的心跳和喉部肌肉运动。

它的用户主要是中风后丧失说话能力的人。这些人可以张嘴,做出说话的口型,但是无法正常发音。

他们佩戴这个脖巾后,颈部的运动数据就通过它传给电脑,经过模型训练,可以用电脑语音还原出用户想说的话。

3、雪宝机器人

人形机器人何必一定做成人形。

迪斯尼最近发布了一个机器人,样子就是电影《冰雪奇缘》的雪宝。

它用来在迪斯尼乐园,跟游客互动。

它启示我们,人形机器人做成卡通形状也很好。

另外,LG 公司在美国 CES 展会上,展示了他们最新的家务机器人

这个机器人的功能就是做家务,比如叠衣服和洗碗。我觉得,国内厂商可以借鉴,展示机器人功能时,不要展示跳舞打拳,而要展示如何做家务。

文章

1、别用 MySQL,改用 MariaDB(英文)

曾经的明星数据库 MySQL,最近几个月的代码提交数为0(上图)。作者认为,种种迹象表明甲骨文已经放弃了这个项目。

2、10秒获得 AI 代码评审结果(英文)

本文介绍一个技巧,让 AI 快速给出提交代码的评审结果,方法是不要提交整个代码库,只提交 diff 的部分。

3、使用 Pandoc 生成静态网站(英文)

文档格式转换工具 Pandoc 可以用来生成静态网站,作者介绍自己是怎么做的。

4、锚点元素<a>的一些鲜为人知的地方(英文)

锚点元素<a>用来生成链接,本文介绍如果链接到一些特殊字符的情况。

5、学习自定义元素(英文)

一篇 HTML 自定义元素的教程文章,写得简单清晰。

6、Go、Rust 和 Zig 的一些想法(英文)

作者是一个高级程序员,谈谈他对 Go、Rust、Zig 三种语言的感受。有趣的地方是,这三种语言都没有类,也不支持面向对象编程。

7、我的个人基础设施(英文)

作者介绍他自己的家庭实验室。比较有趣的是,他的个人网站是本地构建后,自动用 Syncthing 同步到服务器,这对小型静态网站确实简单。

工具

1、GoRead

开源的电子书阅读器应用,支持桌面与移动端(Android/iOS)。(@zhashut 投稿)

2、EasyPostman

用于 API 调试的跨平台桌面应用,对标 Postman + JMeter。(@lakernote 投稿)

3、Port Sentinel(端口哨兵)

Windows 桌面应用,查看端口占用情况。(@Sanjeever 投稿)

4、Building Sunlight Simulator

基于 Web 的楼盘采光 3D 日照模拟工具,帮助购房者评估小区采光。(@SeanWong17 投稿)

5、Office App

一个纯本地的 Office 网页应用,可以离线在网页创建/编辑 Word、Excel、PowerPoint 文件。(@baotlake 投稿)

6、ScreenshotSnap

免费的网站截屏在线工具,提供 API,可以直接将截图代码插入网页。(@phpiscute 投稿)

7、tsshd

SSH 服务器登录协议的全新实现,特点是连接不掉线,可以重连前一个对话。(@lonnywong 投稿)

8、AirScan-QR

一个开源网页应用,通过动态二维码发送/接收文件。(@topcss 投稿)

9、LuCI Bandix

开源路由器操作系统 OpenWRT 的一个插件,可以监控局域网各设备的实时流量和目的地。(@timsaya 投稿)

10、pure-genealogy

开源的网页族谱工具,用来生成家族族谱,基于 Next.js + Supabase。(@yunfengsa 投稿)

11、mdto.page

这个网站免费将 Markdown 文件转成 HTML 格式,发布成公开访问的网页。

AI 相关

1、ChatGPT 翻译

OpenAI 悄悄发布的翻译功能,只有在官网可用。

2、Mango Desk

一个跨平台的桌面应用,使用自然语言进行本地文件搜索。(@moyangzhan 投稿)

3、OpenWork

Claude 公司新产品 CoWork 的开源替代品,让普通用户不编程,就能完成文件操作,定位就是"Claude Code 的非编程版"。

另有一个类似项目 Open Claude Cowork。(@aiagentbuilder 投稿)

4、Wolfcha(猹杀)

开源的网页游戏 AI 狼人杀,除了玩家自己,其他所有角色(女巫、猎人、守卫、狼人等)都由 AI 扮演。(@oil-oil 投稿)

资源

1、维基百科25周年

维基百科是2001年1月13日上线的,今年是25周年纪念。这个网站是官方的纪念网站,以互动形式展示了发展历程。

另外,还有一篇文章,介绍互联网档案馆的历史(下图)。

2、HTTP:COLON

这个网页可以查看指定网站返回的 HTTP 标头,详细解释每个字段的含义。

3、现代 Java(Modern Java)

面向初学者的 Java 语言教程。

图片

1、中国新能源建设的惊人规模

90后摄影师储卫民拍摄的中国新能源建设。

他说:"从地面上很难体会这些发电厂的规模,但当你升到空中时,就能看到它们与山脉、沙漠和海洋之间的关系。"

青海冷湖镇

浙江象山县

青海塔拉滩

内蒙古阿拉善

"我一开始只是拍摄风景,但2022年我去贵州、云南、青海等地旅行时,不断看到风力发电场和太阳能发电厂出现在我的镜头里。我意识到这就是我们这个时代的故事----但几乎没有人系统地记录它。"

文摘

1、谷歌14年工作的教训

大约14年前,我加入谷歌,以为这份工作就是编写优秀的代码。

这个想法部分正确。但随着时间的推移,我越来越意识到,真正成功的工程师不一定是最优秀的程序员,而是懂得驾驭代码之外一切的人。

下面就是我得到的经验教训。有些教训是我走了几个月的弯路得到的,还有一些需要数年才完全领悟。它们都与具体的技术无关----技术变化太快,根本无关紧要。

(1)工程师想在大公司生存,必须学会沟通。

因为在大公司,团队是组织的基本单位,推进项目必须跟其他团队沟通。项目越大,你花在跟其他人、其他团队沟通的时间就越多,比编写代码的时间还多。大多数"慢"的团队实际上是不沟通的团队。

为了顺利沟通,清晰是第一位的要求。它不仅可以加快沟通,还能降低代码风险。最优秀的工程师都会用清晰易懂的代码来代替炫技。

为了提高表达的清晰性,你可以尝试写作和去教别人。如果你能用简单的语言解释某件事,你就是真的理解它了。

(2)想要得到晋升,必须有人为你说话。

职业生涯初期,我曾认为优秀的工作成果代表了一切,但我错了。代码默默地躺在代码库里,不会为你说话。

那些对你至关重要的会议,你本人很可能没有机会参加。你需要你的经理、同事在会上提到你、推荐你。他们可能这样做,也可能不会。

平时工作中,你尽量不要为自己增加阻力。如果开会的时候,你赢得每一场辩论,很可能就是在积累无声的阻力。你之所以"赢",不是因为你说服了别人,而是因为他们不再与你争论,放弃了,将会在其他场合表达这种不满。

(3)专注于你能控制的事情,忽略你无法控制的事情。

很多事情,你改变不了,不要为这种事情烦恼。这不是被动接受,而是策略性分配精力。如果你把精力浪费在无法改变的事情上,就等于放弃改变那些原本可以改变的事情。

(4)简化工作往往可以提高绩效。

当系统运行缓慢时,人们的第一反应是增加缓存层、并行处理和更智能的算法。有时这样做没错,但我发现,删除不必要的工作几乎总是更有效果。下次进行优化之前,你要先问问自己这项工作是否应该存在。

(5)时间比金钱更有价值,你要抓紧时间。

职业生涯初期,你用时间换取金钱,各种事情都做----这无可厚非。但到了某个阶段,情况就完全不同了,你会开始意识到,时间才是不可再生资源。你要专注于那些对你最重要的事情,放弃其他事情。

言论

1、

-- 一位程序员评论 OpenAI 宣布在 AI 对话中加入广告

2、

Netflix 的电影不追求视觉效果,因为大多数观众是在手机、平板和笔记本电脑上看,内容不需要为大银幕制作、而是为小屏幕制作的。

-- 马特·达蒙,美国著名演员

3、

我从未见过哪个群体比程序员更热衷于分享知识。其他行业都是严守知识、保守秘密,程序员则是免费提供源代码、书籍、博客文章、演示文稿、视频教程等等。

编程领域没有什么神圣不可侵犯的东西。如果你想学习,你可以找到免费书籍、完整的源代码、论坛、聊天室、邮件列表、线下聚会、博客文章、视频讲座、教程以及你可能需要的一切资源。尽管举手,总会有人乐于助人,倾囊相授。

-- 《我是如何学习所有编程知识的》

4、

今年的 iOS 26 中,一些 UI 元素利用 HDR 屏幕,采用高光,比纯白色更亮。如果你曾经在 iPhone(或其他任何支持 HDR 的屏幕)上看过 HDR 照片,然后再看看以 SDR 模式显示的 UI,你就会知道它看起来有多么灰暗黯淡。

-- 《亮模式的膨胀》,作者发现 iOS 每年都变得更亮,容易产生视觉疲劳,让他不得不使用暗模式

5、

如果你想批评大型组织的运作方式,首先要了解它们为何如此运作。否则,批评会显得尖锐,但却毫无意义。

-- 《关于大型软件公司的常见误解》

往年回顾

年底的未来已来(#335)

为什么 PPT 不如备忘录(#285)

青年失业率与选择创业(#235)

美国宪法拍卖,一个区块链案例(#185)

(完)

那天不小心在 vscode 的 codex 扩展中误删了对话,经过一番折腾终于找回来了,下面是我的操作:

01. 先去找 codex 的全局配置目录:

windows 上默认是:

  • %USERPROFILE%\.codex\
在文件管理器的路径输入框中,直接复制上面的路径,然后粘贴再按回车就可以了

如果是在 linux 上默认是:~/.codex

在里面可以看到两个目录:

  • sessions/:正常会话记录

  • archived_sessions/:被归档的会话记录(会话被删除之后会放到这里)


02. 根据内容找到对话 .jsonl

对话通常是 .jsonl(JSON Lines,一行一个 JSON 事件)

可以看到里面有很多这样的文件:

rollout-2026-01-13T10-28-22-<ID>.jsonl

归档文件很多,随便点击几个进去可以看到一些曾经的聊天记录,如果归档文件多,一个个找不太现实,这时最好用对话里你记得的一句独特文本去搜

我让 ai 帮我写命令找


Get-ChildItem "$env:USERPROFILE\.codex\archived_sessions" -Filter *.jsonl |

Select-String '关键字' -List

命中后,会得到包含这句关键字的.jsonl 文件


03. 恢复对话 sessions

操作前建议先备份一下:

把命中的 .jsonl 复制一份到临时目录(你也可以复制到别的安全地方)

然后把它移回 sessionssessions 往往按年月日分目录,你可以照文件名里的日期建,比如:

$env:USERPROFILE\.codex\sessions\2026\01\13 


04. 重启 VS Code

这时候应该就能看到对话了


05. 一些想法

我想既然对话可以这样恢复,那么应该也可以导出迁移到别的设备上,不过我还没尝试过,有兴趣的小伙伴可以试一下..


📌 转载信息
原作者:
d2wstudy
转载时间:
2026/1/19 17:38:31

韩国巨头Kyowon确认在勒索软件攻击中发生数据泄露

Microsoft更新曾触发安全警报的Windows DLL文件

Reprompt攻击劫持Microsoft Copilot会话以窃取数据

FortiSIEM严重命令注入漏洞的利用代码已公开

适用于VS Code的Microsoft Copilot Studio扩展现已公开发布

这款80美元的翻新触屏Chromebook可免费配送

严重漏洞允许黑客通过蓝牙音频设备追踪和窃听

如何使用Tines自动化实现应用程序的即时访问

韩国巨头Kyowon确认在勒索软件攻击中发生数据窃取

Microsoft更新曾触发安全警报的Windows DLL

重提示攻击劫持Microsoft Copilot会话以窃取数据

FortiSIEM严重命令注入漏洞的利用代码已公开

适用于VS Code的Microsoft Copilot Studio扩展现已公开发布

这款80美元的翻新触屏Chromebook可免费配送

严重漏洞允许黑客通过蓝牙音频设备追踪与窃听

如何使用Tines实现应用程序即时访问自动化

在 vscode 系编辑器中使用 claude code 插件时候,可能会遇到强制登陆的问题:

Claude Code can be used with your Claude subscription or billed
based on API usage through your Console account.

How do you want to log in

这个时候不要慌,你的配置可能没有问题。

打开编辑器设置,找到插件中的 claude code,打开这个选项

再次打开 claude code 就会发现没有登陆提示了


📌 转载信息
转载时间:
2026/1/14 18:14:14

背景

你是不是也有这种痛苦:
每天在 PowerShell + 各种编辑器的 Terminal 里库库手打命令,输错一个字母就重来;
想找上一条命令只能疯狂按 ↑ ↓;
更离谱的是 —— 还没有自动补全,每条命令都得从头敲!

如果你也被这些折磨过 —— 恭喜你,今天这个工具能让你直接起飞:
装上它,PowerShell + 各种编辑器的 Terminal 的命令提示 / 补全体验立刻提升一大截,常见命令、参数、历史记录都能更顺手地调用。
一条命令安装,立刻告别重复手打!

工具

重磅推荐 PSReadLine (大家不会认为是我自己写的工具吧)

PSReadLinePowerShell 里用来 “增强命令行交互体验” 的组件(模块)。你可以把它理解成:给 PowerShell 的输入框加上更聪明的编辑器能力。

PSReadLine 支持:

  • 历史与搜索:支持 Ctrl + R 反向搜索历史命令,也能做 “按前缀翻历史”(输入 git 再按 ↑ 只找以 git 开头的历史)。
  • 智能补全 / 预测:根据你的历史记录(以及配置)在你输入时给出建议,减少重复敲命令。
  • 更好用的编辑体验:更顺手的光标移动、选中、剪切 / 复制、撤销等快捷键,输入长命令不再痛苦。
  • 可自定义键位和行为:你可以把常用操作绑定到自己习惯的按键上,甚至把补全、历史搜索的逻辑改成你想要的样子。

大家是不是已经等不及要安装了,安装非常简单,在 powellshell 中执行一行命令即可安装

Install-Module PSReadLine -Force

弹窗提示直接回车,等待安装完成。

提示:需要打开新的 shell 命令才会起作用哈。

展示效果

附录

VS Code 里把默认命令行设为 PowerShell

  1. Ctrl + Shift + P
  2. 输入并选择:Terminal: Select Default Profile
  3. PowerShell(一般会显示 PowerShellWindows PowerShell

📌 转载信息
原作者:
wangguodong
转载时间:
2026/1/14 10:22:05

本地配置 texlive + vscode

1. 背景

随着 overleaf 免费版的编译时间不断缩小,遇到过长的文本可能出现无法编译超时的情况。于是考虑在本地
配置 texlive 进行编译。由于我使用 vscode 较多,因此并没有下载 texworks, 而是在 vscode 上进行配置,同时
可以享受到 vscode 的 AI 集成等功能。

本机环境为 windows11。

2. 安装 texlive

首先前往 Index of /CTAN/systems/texlive/Images/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

出现如图所示的页面,texlive.iso 或 texlive2025.iso 进行下载即可。

下载时间十几分钟左右,需耐心等待。

接着在本地解压,得到

选择 install-tl-windows.bat 进行安装,即可。可以选择不安装前段 texworks。

3. 配置 vscode

首先安装 vscode 的 latex 插件,一般选择为 LaTeX Workshop。

\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\usepackage{geometry}    % 调整页边距
\usepackage{amsmath}     % 数学公式支持
\usepackage{graphicx}    % 插入图片


% 2. 基础设置
\geometry{a4paper, margin=1in} % A4纸,1英寸页边距
\title{LaTeX中文文档示例}       % 文档标题
\author{测试用户}               % 作者
\date{\today}                   % 日期(\today表示当前日期)

% 3. 文档开始
\begin{document}
\maketitle % 生成标题(包含标题、作者、日期)

% 正文段落
这是一段中文正文示例。LaTeX擅长处理复杂排版,尤其在数学公式、学术引用和长文档结构上优势明显。

% 无序列表(可用于罗列要点)
\begin{itemize}
    \item 优点1:排版美观,格式统一
    \item 优点2:数学公式支持完善(如下方示例)
    \item 优点3:跨平台兼容,文档格式稳定
\end{itemize}

% 数学公式示例(两种常用形式)
% 1) 行内公式(嵌入正文):勾股定理 $a^2 + b^2 = c^2$
% 2) 独立公式(单独成行,自动编号):
\begin{equation}
    f(x) = \int_{-\infty}^{+\infty} e^{-t^2} dt = \sqrt{\pi}
\end{equation}

% 插入图片(需将图片文件放在同一目录,替换"test.jpg"为实际文件名)
\begin{figure}[h] % [h]表示优先将图片放在当前位置
    \centering % 图片居中
    \includegraphics[width=0.6\textwidth]{test.jpg} % 宽度设为页面60%
    \caption{图片示例(可修改为实际图片说明)} % 图片标题
    \label{fig:test} % 图片标签(用于后文引用)
\end{figure}



\end{document}

在 latex 中最麻烦的问题是中文字体的寻找,Windows 上的字体和你认为的名称可能有较大出入,因此会出现
字体未找到的错误。

这里采用 xeCJK,因为 ctex 的默认配置会找 SimHei 字体,而本机简黑字体可能名称不直接叫 SimHei。
故出现如图错误

若想使用 ctex 则需要将默认配置关闭,并重新配置字体。

\documentclass[fontset=none]{ctexart}
\setCJKmainfont{SimSun}
\begin{document}
你好,世界
\end{document}

那么我们如何在本机上找到我们需要的字体呢,这时候可以用到 powershell 中的 fc-list 命令,查找本机上所有字体。

我们可以看到,主要有两个 C:/WINDOWS/Fonts 和 H:/texlive/2025/texmf-dist/fonts 两个文件夹下的字体,
H:/texlive/2025/texmf-dist/fonts 是 texlive 自带字体,主要用于数学,西文等。
C:/WINDOWS/Fonts/ 是我们本机自带字体,我们将要在他的目录下寻找我们需要的中文字体。

当我们需要查找仿宋字体时,我们可以 fc-list | Select-String “song”, 得到如图结果!

这里的 STFangsong 就是我们需要的名称。

另一个问题则是 settings.json 的配置,我之前使用这位 https://zhuanlan.zhihu.com/p/624932249 博主的配置。但发现存在引用时,会发生无法二次编译的问题,于是进行了添加

{ "latex-workshop.latex.autoBuild.run": "onSave", "latex-workshop.showContextMenu": true, "latex-workshop.intellisense.package.enabled": true, "latex-workshop.message.error.show": false, "latex-workshop.message.warning.show": false, "latex-workshop.latex.tools": [ { "name": "latexmk_xelatex", "command": "latexmk", "args": [ "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-outdir=%OUTDIR%", "%DOCFILE%" ] } ], "latex-workshop.latex.recipes": [ { "name": "LaTeXmk (XeLaTeX)", "tools": ["latexmk_xelatex"] } ], "latex-workshop.latex.recipe.default": "LaTeXmk (XeLaTeX)", "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo", "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk" ], "latex-workshop.latex.autoClean.run": "onFailed", "latex-workshop.view.pdf.viewer": "tab", "latex-workshop.view.pdf.autoReload.enabled": true, "latex-workshop.view.pdf.reloadOnStart.always": true, "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click" } 

精简了一些指令,只使用 latexmk_xelatex 用于管理多次编译。

4. 引用

https://zhuanlan.zhihu.com/p/624932249


📌 转载信息
原作者:
lycx
转载时间:
2026/1/12 16:41:19

使用方法:用 vscode 打开你本地 vscode 所在目录的 index-C-orm5fu.js 文件 (具体文件名、路径可能会根据每个人的操作系统、个人配置有所不同,请自行替换。我是 win10)。

**

注意修改前请自行备份 index-C-orm5fu.js 文件,以防修改错误导致 codex 插件不可用。

**

在模型选择中,直接使用当前可用的模型,如 5.1\5.2 等,输入以下提示词:

==================================================================
帮我在当前 C:\Users\Administrator.vscode\extensions\openai.chatgpt-0.4.58-win32-x64\webview\assets\index-C-orm5fu.js 中,调整模型顺序
搜索 MODEL_ORDER_BY_AUTH_METHOD。
在 apikey: 列表最前添加 / 确保有 gpt-5.2-codex(与 chatgpt 列表一致)。
放宽仅 ChatGPT 登录限制

搜索 CHAT_GPT_AUTH_ONLY_MODELS。
列表里只保留 codex-auto;删除可能存在的 gpt-5.2-codex。
防止默认回退(关键一步)

搜索片段 CHAT_GPT_AUTH_ONLY_MODELS.has (normalizeModel (mt))。
你会看到类似条件:… && !lt && !!mt && CHAT_GPT_AUTH_ONLY_MODELS.has (normalizeModel (mt))
在!lt 后面插入 Ye!==“apikey” &&(Ye 是当前 authMethod),改成:
… && !lt && Ye!==“apikey” && !!mt && CHAT_GPT_AUTH_ONLY_MODELS.has(normalizeModel(mt))
含义:只有非 apikey 且模型在该集合时才强制回退;apikey 不回退。

==================================================================

完成后重启一下 codex 插件或者 vscode 后,gpt-5.2-codex 模型就可以直接选择使用了


📌 转载信息
转载时间:
2026/1/10 19:12:58

写在前面:本教程仅面向仍有 IDE + VibeCoding 使用需求的佬友。坚持无 IDE 编程的佬可以直接无视。

引言

尽管现在 Claude Code、Codex、Opencode 等 TUI 编程代理工具火热,代理可操作性比 “上一代 AI 编程工具” 如 Cursor 等更强,营销号也更爱推。但面对论文写作、快速文稿编辑以及部分学习性编程任务时,IDE 仍然具有不可替代的优势。
尽快 Cursor 很火,但我仍不建议、目前也不能在 Cursor 中畅快使用 CPA 等一切第三方 API(CPA 层面我已提交 PR 并与作者多次讨论、我们尽力了)。其一是即便用第三方 API 仍然需要先开订阅,其二是目前 Cursor 官方对第三方 API 的适配几乎为 0,存在许多 bug,例如以 responses 格式编写请求体,但却用 v1/chat/completion 接口发送请求,导致新版模型完全不能使用。(此问题 Cursor 官方社区有若干用户反馈,官方拒绝修复)
因此特意撰写此贴,并给出参考的配置方案。目前我仍然推荐 VS Code 搭配 AI 工具、可选 overleaf 或 latex workshop 等进行科学论文写作和 markdown 文档编写。

操作步骤

  1. 建议使用 VS Code Insiders 版本
  2. 安装官方 Github Copilot 插件(新版已自带),搭配学生包可免费使用许多模型。
  3. 在 Copilot 侧边栏模型选择菜单中,选择最下方的管理模型,弹出模型页面后,右上角选择添加模型
  4. 关键一步:在添加模型弹出菜单中,选择 OpenAI Compatible 格式

    在这一步中,如果没有这个选项,请检查是否使用预览版,如果仍不想使用预览版:
    技巧:修改~\.vscode\extensions\github.copilot-chat-0.35.0\package.json 中的 "when": "productQualityType != 'stable'""when": "productQualityType == 'stable'",该选项就会显示出来。
  5. 正常添加模型名称(会弹两次对话框、两次输入要一致)、接入点( https://xxxxxx/v1,不要多写也不要少写,此外,要使用 https ),然后输入对应的 key(这一步可能不会紧接着弹出,自己在模型列表中,OpenAI Compatible 选项旁边有一个设置按钮,选择模型后再次设置 key 即可)
  6. 在侧边栏选择你添加的模型进行对话即可。

结果和结论

实测结果:可以正常对话、修改文件、联网搜索等。
如图:



📌 转载信息
原作者:
moxiyan
转载时间:
2026/1/8 18:15:27

现在面向 GPT 开发越来越方便了.

但是从我混的很多 telegram 电报群里面看,很多人还在提出一些很基础的需求,看来大家并没有大规模地开始面向 GPT 开发.

我把最近一段时间,我自己实现的面向 GPT 开发的实例整理出来,希望对读者有所启发.

也许你改进一下前期数据的准备,也许你改进一下描述需求的方式,也许你限制一下 GPT 工作的范围,就会得到能让你满意的结果了.

现在各个 GPT 在不同的应用场景 (任务) 下还是各有所长,所以我也会记录用到的 GPT 是哪个.

  • 当然,随着时间的流逝,各个 GPT 还会进一步发展,所以我这里记录的 GPT 也只是一个参考.

1. 用 VS Code 阅读 Sing-box 文档 生成配置文件

Prompt (发给 GPT 的要求)

a)

下载这个项目的文档 Introduction - sing-box

b)

生成一个作为客户端使用的配置文件
监听本地 1080 端口 socks 作为 inbound
连接一个下面这样参数的 reality 协议节点作为 outbound
协议 (protocol) = vless
地址 (address) = 74.48.9.95
端口 (port) = 8972
用户 ID (id) = fb0d60cf-1084-412d-ba59-fd5c1166b89d
流控 (flow) = xtls-rprx-vision
传输协议 (network) = tcp
传输层安全 (TLS) = reality
SNI (serverName) = www.paypal.com
指纹 (Fingerprint) = chrome
公钥 (Public key) = Qam0-DVzhHghfZPi4Pfx3iQbmVt0YJBhcb0cyMsFdEc

用到的 GPT

Antigravity

Gemini3
Antigravity 是 Google 家的,所以里面用的就是这个

关键点

当你给 GPT 一个整体任务时,如果 GPT 返回的效果不太好.
你可以把任务切分,或者让 GPT 先把任务切分,也可以叫规划吧.
你可以看看任务切分 / 规划 得对不对.
然后关注每一步小任务是不是正确完成,如果某一步小任务完成得有问题,就不要进入下一步.

具体到这个案例,如果第 1 步获取的文档是错的或者不完整,那就不要开始生成配置文件.

2. ech-wk 给窗口添加滚动条 改善小屏幕上的使用体验

Prompt (发给 GPT 的要求)

把 gui.py 上传为附件,再提出要求

附件中的代码 有一个问题,在屏幕分辨率不高的情况下,窗口显示不全,而且没有滚动条

用到的 GPT

Claude

关键点

在这个案例中,我用自己的编码能力识别出了,gui.py 负责 GUI 界面。所以只需要处理这个文件.

如果你是纯小白,那么可以先让 GPT 帮你分析整个项目中,负责界面的是哪一部分.

GitHub

3. 在 VPS 注册页面 和 美国人信息页面 高亮显示关键字 油猴篡改猴 tampermonkey 脚本

Prompt (发给 GPT 的要求)

a)

有这样一个 HTML 页面
页面中可能包含 “first name”, 也有可能 是在 input 元素的 placeholder 属性中包含 “first name”
我需要查找并高亮这些 “first name”

b)

需要整合为可以在浏览器的 console 执行的 js 文件

c)

把 first name, firstname, full name, fullname, 全名,姓名 归为一类,显示同样的高亮颜色或边框颜色.
对于同一类关键字,边框颜色和文字底色颜色应该一致.

d)

把 first name, firstname, last name, lastname, full name, fullname, 全名,姓名 归为一类,显示同样的高亮颜色或边框颜色.
把 phone number, phone, 电话 归为一类.
把 street address, street, 街道地址,街道 归为一类.
把 city, 城市 归为一类.
把 full state name, state, 州全称,州 归为一类.
把 postcode, zip code, 邮编,归为一类.
以上每一类,都要使用独特鲜明的颜色,不应该与其它任何一类颜色相同.

用到的 GPT

Gemini

关键点

在这个案例中,我自己先对需求进行了分析。这是一个把同样的逻辑 / 功能 应用到好多个 不同的 分类 中的事情.

所以我首先关注怎么在一个分类中实现我要的功能.

然后再将同样的处理批量应用到更多的分类.

GitHub

4. YouTube 视频信息页面 网速换算为 MB/s 油猴篡改猴 tampermonkey 脚本

Prompt (发给 GPT 的要求)

我有一个 html 页面,
其中这个位置的元素 1)
document.querySelector(“#movie_player > div.html5-video-info-panel.ytp-sfn > div > div:nth-child(9) > span > span:nth-child(2)”)
内容是 17085 Kbps 这样的格式,
我需要在这个元素 1) 的后面,增加一个元素 2) , 内容为 元素 1) 的内容换算为 MB/s 的单位.
元素 2) 的数字 应该每 10 秒刷新

用到的 GPT

Gemini

关键点

在这个案例中,我自己先用浏览器 的 F12 开发者工具 找到了 HTML 元素的 path

如果你是纯小白的话,也许需要使用一些基于浏览器插件形式的 GPT.
这样,你可以基于当前浏览器页面,描述你的需求.

GitHub

5. 用 Cloudflare Snippet 实现反代 blogspot

关键点

Gemini 中关于 snippet 的知识不及时.

我问到下面这样的用法,Gemini 说 snippet 不支持,只有 worker 支持。但,其实现在 snippet 是支持的.

export default {
  async fetch(request, env, ctx) {
    try {
      return await handleRequest(request, env, ctx);
    } catch (e) {
      return new Response(e.message || "Internal Error", { status: 500 });
    }
  },
}; 

用到的 GPT

Claude

6. 下载 独树不成林 播客的全部封面 并做成 电报 telegram 贴纸 sticker

Prompt (发给 GPT 的要求)

实现一个基于 HTML JS 的工具
页面包含以下几个部分

  1. 文本框 可输入 podcast 的 RSS 地址
  2. 文本框 可从 1) 获取 RSS 内容,也可以手工输入 RSS 内容
  3. 文本框 分析 2) 的内容,列出所有封面图片的地址。可手工编辑 添加或删除
  4. 显示 3) 中的地址对应的图片
    举例:
    https://feed.xyzfm.space/y9qnpfdrctnx 是一个 podcast 的 RSS 地址,会被填写到 1)
  5. 可得到 RSS 数据,xml 格式。会被填写到 2)
  6. 中有 <itunes:image href=“https://image.xyzcdn.net/Fgd_z5yexkQF_GB0LF4Xncqqf8CU.png”/> 这样的元素,应该将 https://image.xyzcdn.net/Fgd_z5yexkQF_GB0LF4Xncqqf8CU.png 填写到 3)
  7. 显示 3) 中的地址对应的图片

用到的 GPT

Gemini

关键点

把整个转换过程 规划为几个步骤

每个步骤有可检查的结果,而且可以人工手动修改。再接着进行下一步.

GitHub

7. 去掉 cfnew 的视觉特效 的操作整合到 Github Action 里

Prompt (发给 GPT 的要求)

有这样一个 github 项目
项目里有一个文本文件 file1
我需要用 Github Action 对文件做如下操作:

  1. 查找所有的 animation: 替换为 //animation:
  2. 查找所有的 function createMatrixRain () {, 在下一行添加一行 return;
    这个 Github Action 不要自动触发,只能手动触发

用到的 GPT

Claude

GitHub

8. 去掉 cfnew 的视觉特效 保留业务逻辑

Prompt (发给 GPT 的要求)

分析上传的文件,这是一个用于 cloudflare worker 环境的 js 脚本

请分析出显示 HTTP 页面中的视觉特效部分,位于代码的什么位置.

用到的 GPT

Claude

GitHub

9. 当检测到关键字时 私信发送对应的贴纸 tg-keyword-react-bot

Prompt (发给 GPT 的要求)

用到的 GPT

Claude

生成的程序有 BUG, 获取消息的纯文本

message_text = event.message.message

正确的做法是提取消息的 markdown 文本

from telethon.extensions import markdown
message_text = markdown.unparse(event.message.message, event.message.entities)

关键点

用具体的示例告诉 GPT 应该达到怎样的效果

GitHub

10. 极简 GitHub Porxy 支持 GitHub 脚本的无限嵌套调用

Prompt (发给 GPT 的要求)

基于 cloudflare 的 woker, 开发 一个专门 反向代理 github 的工具

  1. 本代理 接收的 path 部分 应该是一个 http:// 或者 https://
  2. 如果 path 部分 不是 http:// 或者 https:// 开头
    那么加上 http:// 或者 https://
  3. 判断 本代理 接收的 链接 是否 github
    判断方法为:
    链接 的域名部分 应该是 git 开头的主域名

    github.com
    raw.githubusercontent.com
    api.github.com
    gist.github.com
    codeload.github.com
    avatars.githubusercontent.com
    assets-cdn.github.com
    这些域名的 主域名 都是 git 开头的
  4. 在获取需要反向代理的内容后
    检查 path 是否以 .sh 结尾,来判断 是否 脚本文件
  5. 对于 .sh 结尾的脚本文件
    对文本内容进行查找替换
    将 github 的链接前面都加上 本代理的域名,
    这样可以解决脚本嵌套使用的场景
    判断 是否 github 链接的方法 参考 第 3 步

用到的 GPT

Gemini

灵感点

如果你不需要一个大项目的完整的功能,你可以向 GPT 描述你用得着的那一小部分功能,这样能用很少的代码量完成,而且还方便你自己 自定义修改.

GitHub

11. 在网络受限的 VPS 上 运行一个脚本 向外访问网络时暂停 使用者进行替代操作

Prompt (发给 GPT 的要求)

a)

做一个 fake-curl-wget.sh 脚本.

  1. fake-curl-wget.sh 包含一个 curl () 的壳子,和一个 wget () 的壳子
  2. 使用者在终端先 source fake-curl-wget.sh 再执行其它脚本
  3. 这样,后面执行的脚本会调用到 fake-curl-wget.sh 中的 curl () 壳子 和 wget () 壳子
  4. 每次调用 curl 或 wget 时,打印一个调用序号。这个序号每次调用时,自增 1
    为了避免管道命令导致的序号问题,使用临时文件保存序号.
  5. 对于所有 curl 和 wget 调用,这个序号是统一.
    先调用 curl 时,序号为 1.
    接着调用 wget 时,序号为 2.
  6. 输出 pwd 当前目录
  7. 输出 完整的 curl 命令和全部参数
  8. 输出 完整的 wget 命令和全部参数
  9. 这个 curl 壳 或 wget 壳,并不去真正访问网络
  10. 根据调用序号,执行预设的命令。如,
    cp file1 /path/to/file

    cat file2
    用来替代 curl -LO 或 curl -Lo 的保存文件的命令
    或 curl -L 的输出到 stdout 的命令
  11. 这些预设命令是会被人工编辑而增加的。用 case 实现 10) 的逻辑.
  12. 这个 curl 壳 或 wget 壳,永远返回成功.

b)

  1. 当根据序号 进行 case 逻辑 发现没有匹配的预设命令时,脚本暂停。等待使用者输入.
  2. 根据日志打印的 curl 或 wget 命令及参数。使用者判断 当前序号的操作是要保存文件,还是要输出信息到 stdout.
    2a) 如果当前操作是保存文件,则 使用者自己上传文件到指定位置。输入 空。脚本继续执行.
    2b) 如果当前操作是输出 信息到 stdout, 则 使用者输入 替代指令。脚本执行替代指令.
    如,使用者输入 echo “something” 或 cat /path/to/file

关键点

现在各个 GPT 能上下文窗口很大了.

可以把脚本本身和报错信息 一次性全部发过去.

如果文本框限制了字符数,可以把脚本保存为文件上传.

GitHub

12. 开发电报关键词提醒机器人 telegram keyword monitor bot

Prompt (发给 GPT 的要求)

基于 Telethon 框架,生成一个 telegram 监听关键字推送结果 bot
bot 只接受来自指定 id 的 user 或 group 的控制命令,
bot 监听到关键字后,发送通知信息给指定 id 的 user 或 group 或 channel,
关注的 关键字列表 支持正则表达式
排除的 关键字列表 支持正则表达式
关注的 关键字列表 和 排除的 关键字列表 都更新到配置文件中保存
配置文件 yaml 格式,内容如下:

# 账户信息
account: 
  # 监听信息的user
  api_id: '1400003'
  api_hash: 'd11xxxxx112a7e059e831'
  user_phone: '+86190000010'

  # 发送消息的bot
  bot_token: '1000007:AAHNh8axxxxxxxxxxxxxxxxHA'
  bot_username: 'keyxxxxxrt_bot'

# LOG
logger:
  path: null # e.g. /root/absolute-path/   default null: {_current_path}/logs/
  level: INFO # FATAL,ERROR,WARN,INFO,DEBUG,NOTSET

# 代理
proxy:
  type: SOCKS5 # e.g. SOCKS4, SOCKS5, HTTP
  address: null  # e.g. 127.0.0.1
  port: null # e.g. 1088

# 非公共服务
# bot只接收来自以下ID的命令 可以设置为user或group的ID
command_id_list: 
  - 123456789
  - 987654321
# bot的通知信息发送到以下ID 可以设置为user或group或channel的ID
result_id_list: 
  - 123456789
  - 987654321

# 不处理来自机器人的消息
# 比如,有些群里有自动回复机器人,回复的都是重复的消息;或者一些广告机器人加群之后开始刷屏
ignore_bot_msg: true

# 临时禁止一些数据源, 而不需要user从群组或频道中退出
source_filter: false # 开关, 默认 false
source_filter_ignore_list:
  - 123456789
  - 987654321

# 关注的 关键字列表 支持正则表达式
keyword_list:
  - /keyword1|keyword2|keyword3/ig
  - /keyword4|keyword5|keyword6/ig

# 排除的 关键字列表 支持正则表达式
keyword_exclude_list:
  - /exkeyword1|exkeyword2|exkeyword3/ig
  - /exkeyword4|exkeyword5|exkeyword6/ig

用到的 GPT

Claude

关键点

配置文件是从另一个方面描述程序有些什么功能.

GitHub


📌 转载信息
原作者:
crazypeace
转载时间:
2026/1/4 17:19:51

具体什么使用发布的不确定,今天看到在左侧菜单栏多了一个项,点开一看就是这个。
MCP Registry

以后估计会越来越多,类似与看 Repo 那样看 MCP Server。不过目前只支持 VS Code 的导入。没有其他家的合集那么便捷安装到对应其他工具。


📌 转载信息
原作者:
capgrey
转载时间:
2025/12/30 16:09:50

本人是在 Windows 环境配合 vscode、cursor 使用。
1、下载 exe 文件,并把路径配置到系统环境变量 Path:

2、进入代码项目
执行 codanna init,这步会自动生成配置文件 settings.toml

3、调整 settings.toml, 比如嵌入模型、开启文档索引等

 [semantic_search] enabled = true # Model to use for embeddings # Note: Changing models requires re-indexing (codanna index --force) # - AllMiniLML6V2: English-only, 384 dimensions (default) # - MultilingualE5Small: 94 languages including, 384 dimensions (recommended for multilingual) # - MultilingualE5Base: 94 languages, 768 dimensions (better quality) # - MultilingualE5Large: 94 languages, 1024 dimensions (best quality) # - BGESmallZHV15: Chinese-specialized, 512 dimensions # - See documentation for full list of available models model = "MultilingualE5Large" # Similarity threshold for search results (0.0 to 1.0) threshold = 0.6 [documents] enabled = true [documents.collections.docs] paths = ["."]
patterns = ["**/*.md", "**/*.txt"]

4、开始建立索引,这步会下载模型(首次),需要配置好网络,下载速度视网络情况决定
代码索引:
codanna index . --force
文档索引(文档编码需要是 utf-8 格式):
codanna documents index --progress

5、MCP 配置(我的样例,仅供参考)
Vscode:

{
    "mcpServers": {
        "codanna": {
            "command": "D:\\soft\\codanna\\codanna.exe",
            "args": [
                "serve",
                "--watch"
            ],
            "alwaysAllow": [
                "analyze_impact",
                "find_callers",
                "get_index_info",
                "find_symbol",
                "semantic_search_docs",
                "semantic_search_with_context",
                "search_symbols",
                "get_calls",
                "search_documents"
            ]
        }
    }
}

Cursor:

	{
	  "mcpServers": {
	    "codanna": {
	      "command": "D:\\soft\\codanna\\codanna.exe",
	      "args": [
	        "--config",
	        "D:\\code\\xxx\\settings.toml",
	        "serve",
	        "--watch"
	      ],
	      "alwaysAllow": [
	        "analyze_impact",
	        "find_callers",
	        "get_index_info",
	        "find_symbol",
	        "semantic_search_docs",
	        "semantic_search_with_context",
	        "search_symbols",
	        "get_calls",
	        "search_documents"
	      ]
	    }
	  }
}

6、提示词加入:使用codanna mcp进行语义检索


📌 转载信息
原作者:
Metding
转载时间:
2025/12/29 17:20:16