给软件开发者准备的优质简报,每日阅读 10分钟。
DeepSeek v4
DeepSeek API 首次调用指南
- 兼容性说明:DeepSeek API采用与OpenAI/Anthropic兼容的API格式,可直接使用对应SDK或兼容软件进行访问
- 接入配置:OpenAI格式端点为
https://api.deepseek.com,Anthropic格式端点为https://api.deepseek.com/anthropic,API密钥需从platform.deepseek.com/api_keys申请 - 可用模型:
deepseek-v4-flash和deepseek-v4-pro为当前主要模型,deepseek-chat与deepseek-reasoner将于2026年7月24日停用 - 模型对应关系:
deepseek-chat对应deepseek-v4-flash的非思考模式,deepseek-reasoner对应deepseek-v4-flash的思考模式 - 调用方式:通过POST请求访问
/chat/completions端点,携带Bearer Token认证,可设置thinking参数启用思考模式、reasoning_effort控制推理强度、stream参数切换流式/非流式响应
I Cancelled Claude: Token Issues, Declining Quality, and Poor Support
我为何取消Claude订阅:Token问题、质量下降与糟糕的客户支持
- 作者最初对Claude Code体验良好(速度快、Token额度合理、质量高),但约三周后问题频发,热情迅速消退
- 客户支持质量极差:提交工单后收到自动化的模板回复,问题未被实际解决,工单便被自动关闭并附带"不再监控"的通知
- 代码质量下降:Claude Opus被指出使用了懒省事的变通方案(如在通用文件中注入代码而非直接在JSX中修正),甚至模型自身也承认"那是偷懒的做法",作者认为这种解决方案连初级开发者都不应采用
- Token限额管理混乱:每周窗口突然变更,还出现了官方文档中未记录的神秘月度额度警告,且两小时后警告又自动消失,令用户困惑
- 对话缓存机制存在缺陷:长时间间歇后对话缓存消失,模型重新加载代码库,导致用户为同一内容重复消耗Token
- 尽管作者认同Anthropic的理念、肯定产品的许多功能并实现了显著的生产力提升,但最终因无法同时处理大量新客户导致的服务问题取消了订阅
Arch Linux Now Has a Bit-for-Bit Reproducible Docker Image
Arch Linux 推出位对位可重现 Docker 镜像
- Arch Linux 现已推出位对位(bit-for-bit)可重现 Docker 镜像,使用新的 "repro" 标签在 Docker Hub 上分发,这是继 WSL 镜像实现可重现性之后的又一重要里程碑
- 由于可重现性要求镜像中必须剥离 pacman 密钥,用户首次使用前需运行
pacman-key --init && pacman-key --populate archlinux重新生成密钥环;Distrobox 用户可通过--pre-init-hooks参数自动化此步骤 - 可重现性通过多次构建的摘要一致性(digest equality)以及使用 diffoci 工具比较构建结果来验证
- 主要技术实现包括:在 Dockerfile 中设置
SOURCE_DATE_EPOCH并在org.opencontainers.image.created标签中遵循该值、移除var/cache/ldconfig/aux-cache辅助缓存文件以消除非确定性、使用--source-date-epoch和--rewrite-timestamp选项规范化时间戳 - 该镜像构建复用 WSL 镜像的确定性 rootFS 构建系统,详细技术文档公开在 Arch Linux GitLab 仓库的 REPRO.md 文件中,作者未来还计划建立自动化重建服务以定期验证可重现性
I'm done making desktop applications (2009)
我为何放弃桌面应用程序开发
- 核心发现:作者Patrick McKenzie在开发和销售桌面版"Bingo Card Creator"三年后推出网页版,发现后者在意编写便捷性、功能完善度、销售转化、支持负担和营销推广等方面全面超越前者,从博弈论角度看网页版"严格支配"桌面版,实际销量以近2:1的比例超越桌面版
- 转化率对比:共享软件销售漏斗存在17个可能导致用户流失的关键环节(从搜索引擎检索到完成购买的整个过程中,下载后找不到文件、安装需要JRE升级、重启后忘记用途、无法找到注册方式等任一环节失败即导致流失),典型转化率低于1%;网页应用访客试用转化率(22%-26%)高于桌面版(18%-22%),试用到购买的转化率(2.32%)约为桌面版(1.35%)的两倍
- 广告成本优势:AdWords广告成本方面网页版每次成交约9美元,桌面版约20美元——成本降低超50%使作者能够竞标高流量头部关键词,获取更大市场份额;作者坦承这对Google是利好消息
- 支持负担与盗版问题:最近50位客户中桌面版产生15次支持请求,网页版仅3次;主因是网页版不存在安装问题、注册码遗失、旧版本分散于各下载站等问题;此外网页版从根本上消除了盗版——客户端无法独立运行,必须连接服务器才能使用
- 数据驱动决策:网页应用支持用户行为分析工具(如Mixpanel),作者借此发现"Baby Shower"是最常用词汇、增加功能反而导致销量下降等反直觉事实,并能按用户价值分层定制体验(如为新手隐藏复杂选项、向不同层级用户推送针对性优惠)
- 快速迭代能力:借助A/B测试框架,网页版可在分钟级别内部署和获取数据——作者在7周内发布了67次更新,而桌面版新版本触达半数用户需要数月;但作者同时承认个人偏好桌面应用,Excel在几乎所有方面都优于Google Docs
Spinel: Ruby AOT Native Compiler
Spinel:Ruby AOT编译器
- 由Ruby之父松本行弘(matz)开发,使用Prism解析器将Ruby源码解析为AST文本,经全程序类型推断后生成优化C代码,再由标准C编译器编译为独立原生可执行文件,运行时仅依赖libc和libm
- 基准测试显示平均比miniruby快约11.6倍,计算密集型任务提升尤为显著:Conway生命游戏86.7倍、ackermann函数74.8倍、mandelbrot分形58.1倍、递归fibonacci 34.2倍
- 编译器后端spinel_codegen.rb(约21,109行)完全使用Ruby子集编写,实现真正的自举:先用CRuby引导生成首个原生编译器,再由原生编译器编译自身验证一致性(gen2.c == gen3.c)
- 支持丰富的Ruby核心特性:类继承与mixin、代码块(yield/proc/lambda)、异常处理、正则表达式(内置NFA引擎)、Fiber协程(基于ucontext_t)、Bigint大整数运算(按需链接)以及Symbol专用类型与优化
- 包含多项编译时优化:小类自动提升为C结构体栈分配消除GC开销、字符串链式连接合并为单次内存分配、循环不变长度提取、死代码消除、方法内联、Bigint除法采用O(n log²n)分治算法
- 存在明确限制:不支持eval、元编程(send/method_missing/define_method)、多线程、多字节编码(假设UTF-8/ASCII);开发历史经历了从C版本到Ruby版本再到自举Ruby子集的三次重大重写
Sabotaging projects by overthinking, scope creep, and structural diffing
过度思考、范围蠕变与结构化diff的陷阱
- 项目创意通常走向两条路:直接动手完成,或陷入"寻找先例"的研究漩涡——后者导致既未解决原始问题,也失去了创作的乐趣;核心原因是成功标准不够清晰,当标准模糊时(如"我想学语言设计"vs"我想替代现有工具"),容易在众多分支问题上迷失方向
- 作者以周末木工的shelf项目为例:与朋友边喝咖啡边设计、用剩余材料、凭眼力打磨——核心成功标准是"和朋友一起做木工",因此不会陷入过度优化;对比之下,为Emacs构建diff工具时,4小时研究先例后突然意识到自己的原始需求其实只需4小时就能自己实现
- 范围蠕变守恒定律:任何编程速度的提升都会被相应的不必要功能和偏离所抵消;作者用Nucleo库实现模糊搜索时,意外陷入锚点功能(
^foo匹配路径segment开头),花数小时设计复杂的数据结构后,突然意识到自己从未真正需要这个功能,果断丢弃所有相关代码 - 深层原因是内心评判者(恐惧失败)在压制创作冲动,让人无法享受"通过做事来学习"的乐趣,只能停留在"通过阅读来学习";作者建议拥抱"内心那个20岁的自己",即使事后证明是"明显坏主意",也比只停留在考虑阶段更有收获
- 语义diff工具各有缺陷:difftastic基于tree-sitter但会漏匹配实体(如
PendingClick结构体显示为删除+新增而非重命名)、不支持Python有意义缩进变化;Gumtree学术基础好但匹配质量差;semanticdiff.com最成熟但只有VSCode插件和web服务;mergiraf文档清晰但算法(Gumtree)有根本局限;autochrome用动态规划做Clojure专用方案 - 作者计划用Rust构建tree-sitter实体提取框架,先用简单贪心匹配实现命令行渲染,最终目标是在Emacs中复现Magit风格的实体级diff工作流——查看高层次的类型/函数增删改,逐个展开查看文本diff,并在同一界面内完成编辑