2025-03
发布于 2025年3月1日
我的每日阅读,大部分由 Claude 3.5 Sonnet 总结,感兴趣的可以每隔一段时间来看一眼。上一期:2025-02
2025-03-31
- You should know this before choosing Next.js 这篇文章讨论了选择 Next.js 作为技术栈时需要注意的问题。作者是 Netlify 的员工,他指出了几个主要问题:1) Next.js 缺乏适配器系统,这使得在 Vercel 以外的平台部署变得困难;2) 没有官方的 serverless 支持,其他供应商必须通过逆向工程来实现;3) 框架中存在只为 Vercel 平台服务的特定代码路径。最近的一次安全漏洞事件更凸显了这些问题 - Vercel 在处理这个严重漏洞时表现出对其他平台用户的漠视。虽然 Vercel 拥有 Next.js,但作为一个开源项目,它应该保持更好的开放性和互操作性。作者认为开发者在选择 Next.js 时应该充分了解这些情况,以便做出明智的决定。
2025-03-28
- Learn to code, ignore AI, then use AI to code even better 这篇文章讨论了在 AI 时代是否还需要学习编程的问题。作者是一位拥有 15 年经验的软件工程师,他认为尽管 AI 工具日益强大,但掌握编程基础知识仍然至关重要。他提出了几个关键观点:1) AI 确实能提高编程效率,作者本人每天都在使用 AI 辅助编程;2) 过度依赖 AI 会导致程序员逐渐失去对代码的理解和控制;3) AI 供应商通过将人类积累的知识重新包装后售卖给我们,声称只需要懂英语就能编程,这是一种误导;4) 如果只会依赖 AI 写代码(vibe coding),就会在未来的就业市场上处于不利地位,因为这种技能门槛太低,人人都可以做到。作者建议新手程序员应该先扎实掌握编程基础,然后再利用 AI 来提升编程效率。
2025-03-27
- You should know this before choosing Next.js 这篇文章主要讨论了选择 Next.js 作为技术栈时需要注意的问题。作者是 Netlify 的员工,他指出了几个关键问题:1) Next.js 缺乏适配器系统,这使得在 Vercel 以外的平台部署变得困难;2) 没有官方的 serverless 支持,其他供应商必须通过逆向工程来实现;3) 代码中存在只为 Vercel 平台服务的特定路径。最近的一次安全漏洞处理也暴露了项目治理问题 - Vercel 在发现严重安全漏洞后,等待了 8 天才通知其他供应商。作者认为,虽然 Vercel 拥有 Next.js,但作为一个开源项目,它应该保持更好的开放性和互操作性,让用户能够自由选择部署平台。这些问题值得开发者在选择 Next.js 之前认真考虑。
- Exploring Generative AI 这篇文章主要探讨了生成式 AI 在软件开发中的应用。作者通过一系列备忘录形式的文章,分享了他和同事们在使用 AI 编程助手(如 GitHub Copilot)过程中的经验和思考。主要观点包括:1) AI 编程助手在某些场景下可以提高开发效率,但不能完全替代人工编程,需要开发者具备良好的判断力和代码审查能力; 2) AI 编程助手最适合处理简单、常见的编程任务,对于复杂问题或需要深入理解业务逻辑的场景效果有限; 3) AI 编程助手可能会产生一些问题,如代码重复、测试冗余、缺乏重用等,需要开发者及时发现和纠正; 4) 建议团队建立相应的规范和流程来规避 AI 编程可能带来的风险,如代码审查、质量监控、自定义规则等; 5) AI 编程助手不能替代结对编程等良好的开发实践,反而应该将其作为辅助工具来提升开发效率。
- Replit — What is Vibe Coding? 这篇文章介绍了 Replit 提出的 “vibe coding” 概念,这是一种让非技术人员也能开发应用的新方式。文章主要讲述了以下几点:1) vibe coding 的核心是利用 AI 代理来编写代码,用户只需用自然语言描述需求,AI 就能处理技术实现,让创作者专注于创意和用户体验。2) 传统应用开发需要技术专长或雇佣开发者,而 vibe coding 打破了这个壁垒。据统计,82% 的企业面临开发人才短缺问题。3) Replit 平台提供了完整的解决方案,包括纯文本交互、完整应用生成、云服务集成、一键部署等功能。4) 用户可以选择完全依赖 AI、混合开发或将其作为学习编程的起点。这种方式不是要取代开发者,而是让更多人能够将想法转化为现实。
- Context is all you need: Better AI results with custom instructions 这篇文章介绍了 VS Code 中 GitHub Copilot 的自定义指令功能。主要内容包括:1) 通过创建 .github/copilot-instructions.md 文件,可以为 Copilot 提供项目相关的上下文信息,如编码规范、技术栈等,这样即使用简短的提示也能得到符合要求的代码;2) 可以在 settings.json 中自定义 commit 信息生成、代码生成等功能的行为;3) 支持多个指令文件,可以分别存放不同语言或数据库的规范;4) 可以调整 AI 模型的语气,让其更加务实;5) 新推出的 prompt files 功能(存放在 .github/prompts 目录下)让开发团队可以创建和复用标准化的提示模板。这些功能让 Copilot 能更好地适应团队的工作流程,提高开发效率。
2025-03-26
- Build and deploy Remote Model Context Protocol (MCP) servers to Cloudflare 这篇文章介绍了 Cloudflare 对远程 Model Context Protocol (MCP) 服务器的支持。主要内容包括: 1) Cloudflare 提供了四个工具来简化远程 MCP 服务器的构建:workers-oauth-provider 用于授权、McpAgent 类处理远程传输、mcp-remote 适配器支持本地 MCP 客户端连接远程服务器、AI playground 作为远程 MCP 客户端。2) 远程 MCP 服务器相比本地版本的优势在于可以通过互联网访问,用户只需登录并授权即可使用,这让 MCP 技术可以触达更广泛的用户群体。3) 在 Cloudflare 上构建的 MCP 服务器支持状态管理,可以通过 Durable Objects 实现持久化连接和状态存储。4) 文章还介绍了认证和授权的实现细节,以及如何使用 workers-oauth-provider 来简化这一过程。总的来说,这些新功能让构建远程 MCP 服务器变得更简单,也为 MCP 技术的普及铺平了道路。
- Gemini 2.5: Our most intelligent AI model Google 发布了最新的 AI 模型 Gemini 2.5,这是一个具有思考能力的模型。Gemini 2.5 Pro 实验版在多个基准测试中都取得了领先成绩,特别是在 LMArena 排行榜上以显著优势排名第一。这个模型的主要特点是: 1) 具备思考能力,可以在回答前进行推理分析,提高准确性; 2) 在数学、科学等领域的推理能力大幅提升,在 Humanity’s Last Exam 测试中取得 18.8% 的最佳成绩; 3) 代码能力显著增强,在 SWE-Bench Verified 测试中得分 63.8%; 4) 具有 100 万 token 的上下文窗口(即将升级到 200 万),可以处理包括文本、音频、图像、视频和代码在内的多模态数据。该模型现已在 Google AI Studio 和 Gemini app 上线,即将登陆 Vertex AI 平台。
- The Bitter Lesson: Rethinking How We Build AI Systems 这篇文章讨论了 Richard Sutton 在 2019 年提出的"苦涩教训"理论,主要观点是在 AI 系统中,拥有更强计算能力的系统总是能胜过精心设计的人工规则系统。文章通过三个客服系统的例子来说明这一点:1) 基于规则的方法:维护困难且难以适应变化;2) 有限计算能力的 AI 代理:只能处理简单问题;3) 大规模计算方案:通过并行生成多个响应和推理路径,效果最好。作者认为这对 AI 工程师的工作方式有重要启示:应该专注于构建能够有效利用计算资源的简单系统,而不是过度优化算法。在 AI 领域,真正的竞争优势不在于设计巧妙的算法,而在于能够有效利用海量计算资源。这种思维方式的转变要求工程师们重新思考如何构建可扩展的 AI 系统架构。
- Authorization in Next.js 这篇文章主要讲解了在 Next.js 中如何实现授权机制。主要包含以下几个要点:1) 最重要的授权防线应该在数据源层面,包括 API 层、服务层和数据访问层,这些层级都需要进行权限验证;2) 在路由层面可以通过 Layout 组件或页面组件进行授权检查,但这更多是为了开发体验,不能作为主要的安全保障;3) UI 层面的授权(比如隐藏某些按钮)主要是为了提供更好的用户体验;4) 中间件(Middleware)可以用于授权检查,但由于性能考虑,建议只做一些轻量级的预检查(如验证 cookie 是否存在),而不是直接查询数据库。作者强调,真正的安全防线应该建立在靠近数据源的地方,其他层面的授权更多是为了提供更好的用户体验。
2025-03-25
- Revenge of the junior developer | Sourcegraph Blog 这篇文章讨论了软件开发行业中 AI 编程工具的发展趋势。作者认为编程方式正经历 6 个阶段的演变:1) 传统编程, 2) 代码补全, 3) 对话式编程, 4) 编程代理, 5) 代理集群, 6) 代理舰队。其中 vibe coding(让 AI 完成编程工作)将成为主流。文章指出,编程代理虽然成本高昂(每小时 10-12 美元),但能大幅提升开发效率。到 2025 年下半年,每个开发者可能同时运行多个代理,生产力提升 5 倍。初级开发者比高级开发者更容易接受这种变革。作者建议开发者和公司尽快适应这一趋势,停止手写代码,开始使用对话式编程和编程代理,否则可能在竞争中落后。未来软件工程师的工作将从编写代码转变为管理 AI 代理。
2025-03-24
- 信息的AI可视化(1):AI生成动态PPT的步骤分享 这篇文章介绍了如何使用 AI(主要是 Claude 3.7 Sonnet)来生成动态 PPT 的方法。作者分享了一个 4 个阶段的工作流程:1) 主观描述阶段,通过与 AI 反复沟通来确定想要的视觉风格;2) 抽象风格样式阶段,让 AI 总结当前的美学特征,便于后续复用;3) 量产复用阶段,基于确定的风格批量生成各类 PPT 页面;4) 唤醒阶段,在新对话中让 AI 回忆之前的风格。这种方法的优点是可以快速将信息数据可视化、批量生成标准页面,并且有不错的视觉效果。但缺点是生成的是 HTML 而非原生 PPT 格式,难以深度编辑,且样式稳定性和成本都有待改进。作者强调这不仅仅是生成 PPT,而是一种更广泛的信息可视化方案。
- Is Vite faster than Turbopack? 这篇文章比较了在一个中等规模(20 万行代码,约 750 个文件,100 个页面)的 React 应用中,不同打包工具的开发环境性能表现。作者测试了 4 种配置:Next.js + Webpack、Next.js + Turbopack、Vite + Rollup 和 Vite + Rolldown,主要对比了 4 个场景:1) 冷启动时间,2) 页面编译时间,3) 硬刷新时间,4) Fast Refresh 时间。测试结果显示:Next.js + Webpack 在所有场景下都最慢;Turbopack 在硬刷新方面表现出色;Vite 系列在页面导航方面速度最快,特别是搭配 Rolldown 时性能最佳。不过作者也提醒这不是严格的基准测试,因为 Rolldown 还不稳定,而且 Turbopack 在 App Router 模式下可能会有更好的表现。总的来说,Vite 是否比 Turbopack 快取决于具体使用场景。
- “Vibe Coding” vs Reality 这篇文章讨论了当下流行的 “Vibe Coding” 现象及其局限性。作者认为,虽然 LLM 代理(如 Cursor、GitHub Copilot 等)让编程变得更容易,让非技术人员也能快速搭建项目原型,但这种 “靠感觉编程” 的方式存在严重问题:1) LLM 会重复制造低级错误,如复制重复代码、把服务端逻辑写在客户端等;2) 模型的上下文窗口有限,无法处理大型项目;3) 缺乏长期记忆能力,难以持续维护代码;4) 安全性和可靠性无法保证。作者认为,虽然 “Vibe Coding” 可能帮你完成 80% 的概念验证工作,但要开发可靠、安全、值得付费的产品,仍然需要有经验的开发者来解决那些只有经验和直觉才能识别的难题。在 2025 年,“Vibe Coding” 还不足以创造下一个重大突破。
2025-03-22
- Building an Authorized RAG Chatbot with Oso Cloud 这篇文章介绍了如何使用 Oso Cloud、Supabase 和 OpenAI 构建一个带权限控制的 RAG 聊天机器人。RAG (Retrieval-Augmented Generation) 技术可以让聊天机器人基于内部文档来回答问题。文章通过一个命令行应用示例,展示了如何实现以下功能:1) 使用 Supabase 初始化和填充向量数据库,存储文档内容的向量嵌入 2) 使用 OpenAI 将文档和问题转换为向量嵌入,并生成聊天回复 3) 使用 Oso Cloud 基于用户权限过滤上下文内容。示例中包含两个用户 (HR 成员 Diane 和工程师 Bob) 以及三份文档 (Bob 的内部评价、外部评价和公司假期)。当用户询问时,系统会根据权限返回相应的文档内容作为上下文。这种方式可以确保聊天机器人在提供帮助的同时不会泄露敏感信息。
- React Trends in 2025 这篇文章介绍了 2025 年 React 的主要发展趋势:1) React Server Components (RSC) 将成为 React 生态系统的标准原语,Next.js、React Router 等框架都将采用它;2) React Server Functions (RSF) 作为 RSC 的延伸,将简化数据获取和修改;3) React 19 带来了表单处理的重大改进,包括新的 action 属性和相关 hooks;4) React 生态系统在框架选择上变得更加多样化,除了主流的 Next.js,TanStack Start 和 React Router 也将崭露头角;5) 全栈 React 应用将继续发展,包括身份验证、授权等后端特性;6) Shadcn UI 成为默认的 UI 库选择;7) React 与 AI 的结合将更加紧密,特别是在代码生成和 AI 应用开发方面;8) Biome 可能成为替代 ESLint 和 Prettier 的新工具链;9) React 编译器将自动处理性能优化,无需手动使用 useCallback、useMemo 等。
- Raycast AI 用的好是神器,用不好是鸡肋 Raycast 是一款强大的 Mac 效率工具,最大特色是通过 AI 功能让工作更高效。主要功能包括:1) AI Chat:支持多种 AI 模型,可以随时对话,每小时有 200 次免费额度,还支持视觉识别和联网查询;2) 浏览器增强:通过 Chrome 插件实现网页内容的总结、翻译等功能;3) AI Extension:可以用自然语言控制各种软件,比如搜索笔记、查询浏览记录等;4) Snippet 功能:快速输入常用文本和代码片段;5) 内置多种小工具:窗口管理、计算器、时区查询等。使用建议是一定要设置快捷键,比如用 control + option + command + L 来唤起 AI Chat。虽然功能强大,但关键是找到适合自己的使用场景,合理设置 Prompt,才能发挥最大价值。目前唯一遗憾是还没有 Windows 版本。
2025-03-20
- Real-world uses of TypeScript’s utility types 这篇文章介绍了 TypeScript 中实用工具类型的实际应用场景。作者是 Budibase 的高级软件工程师,分享了他们在项目中常用的几个工具类型:1) Partial:将类型的所有属性变为可选,常用于 API 的部分更新和 Record 类型的部分映射,但只能处理一层深度的对象;2) Omit:用于移除类型中的某些属性,在处理未保存的数据库记录时特别有用;3) ReturnType:获取函数的返回类型,可以帮助解决浏览器和 Node.js 环境下的类型兼容问题;4) Readonly:将类型的属性标记为只读,主要用于表明函数不会修改传入的参数。文章还提到可以使用 ts-toolbelt 库来解决一些工具类型的深度处理问题,或者自定义工具类型来满足特定需求。
2025-03-19
- 浅谈 Agent、MCP、OpenAI Responses API 这篇文章主要介绍了 AI 领域三个重要概念和最新进展:1) AI Agent 是能自主执行复杂任务的智能实体,近期有 Devin、Manus 等产品引发关注;2) MCP 是 Anthropic 推出的模型上下文协议,通过标准化方式让 AI 模型连接外部系统;3) OpenAI 最新推出的 Responses API,集成了网络搜索、文件搜索和计算机操作等工具,让开发者更容易构建 Agent。文章指出 Responses API 将成为 OpenAI 平台构建 Agent 的主要方式,计划在 2026 年中逐步取代 Assistants API。同时也提到了 Agent 技术虽然发展迅速但仍面临上下文长度限制、Token 消耗等挑战,需要人类监督和干预。
- 【教程】15分钟从 0 到 1 开发Chrome插件,实现小红书、B站等4个网站搜索对比,附谷歌插件发布指南 这篇文章讲述了作者如何用 AI 帮助开发 Chrome 插件的经历。作者的朋友需要同时对比小红书、B 站等网站的搜索结果,于是作者利用 AI 工具在 20 分钟内完成了开发。主要步骤包括: 1) 与 AI 讨论需求和解决方案,选择了开发浏览器插件的方案; 2) 配置 Cursor AI 编辑器,使用专门的 Chrome 插件开发 Rule; 3) 让 AI 生成代码,并制作插件图标; 4) 在 Chrome 浏览器中本地测试插件; 5) 与 AI 持续对话优化功能。文章最后还介绍了如何将插件发布到 Chrome 应用商店,包括开发者注册、准备素材和审核流程等内容。作者认为在 AI 时代,编程、写作和英语是最值得学习的三个技能。
- Career advice in 2025. 这篇文章讨论了 2025 年的职业建议,主要围绕当前科技行业的就业市场变化。作者提出了几个关键观点:1) 2010-2020 年间晋升为高级职位的人们现在感觉工作不那么有趣了,因为市场更重视技术细节和 LLM 相关能力,而不是传统的团队管理技能;2) 基础模型和 LLM 的技术转型使许多资深领导者积累的经验变得不那么有用,他们需要学习如何在产品中合理使用这些新技术;3) 非 AI 公司的估值和融资变得更难获取,这导致更少的招聘、晋升机会和薪资增长;4) 公司在压力下要求团队更努力工作以实现增长。作者建议在当前环境下,与其寻找完美的工作机会,不如努力让现有工作变得有意义,同时也不建议完全置身事外,因为 5 年后的就业生态可能会发生重大变化。
- Next.js vs TanStack 这篇文章比较了 Next.js 和 TanStack 两个技术栈的优劣。作者认为虽然 Next.js 在开箱即用和高规模优化方面表现出色,但对于大多数中小型项目来说有点过度设计。Next.js 的主要问题包括:1) 很多优化功能对小规模应用其实没必要,2) 与 Vercel 云服务绑定太深,可能增加成本,3) 学习曲线陡峭,概念复杂难懂,4) 调试非常困难,有多个缓存层,5) 对单页应用支持不够好。相比之下,作者更推荐 TanStack + Vite 的组合,因为它简单优雅,编译速度快,API 直观易懂,不与特定云服务绑定,而且有很好的开发工具支持。作者表示,除非需要处理超大规模应用,否则不会再选择 Next.js。
- Verification-First Development 这篇文章讨论了验证优先开发(VFD)的概念。作者认为测试优先开发(TFD)是 VFD 的一种特例,而测试驱动开发(TDD)则是基于 TFD 的一套完整范式。VFD 的核心理念是在编写代码之前,先确定如何验